Hello! I followed the tutorial https://www.hackingwithswift.com/books/ios-swiftui/importing-an-image-into-swiftui-using-uiimagepickercontroller to allow users to import their own photos in the app. I followed the tutorial closely but I have encountered some issues that I'm not sure how to fix.
struct SettingsBody: View {
@State private var image: Image?
@State private var filterIntensity = 0.5
@State private var showingImagePicker = false
@State private var inputImage = UIImage?.self
var body: some View {
NavigationView {
VStack {
ZStack {
Circle()
.scale(0.3)
.fill(Color.secondary.opacity(filterIntensity))
if image != nil {
image?.resizable().scaledToFit()
} else {
Image(systemName: "pencil")
}
}.onTapGesture {
self.showingImagePicker = true
}
Text("Username")
}
}
.navigationBarTitle("Settings")
.sheet(isPresented: $showingImagePicker, onDismiss: loadImage) {
ImagePicker(image: $inputImage) // Error 1
}
}
func loadImage() {
guard let inputImage = inputImage else { return } // Error 2
image = Image(uiImage: inputImage)
}
}
The errors I am encountering are:
Error 1: Cannot convert value of type 'Binding<UIImage?.Type>' to expected argument type 'Binding<UIImage?>'
Error 2: Initializer for conditional binding must have Optional type, not 'UIImage?.Type'
For reference, this is the ImagePicker.swift file:
import SwiftUI
struct ImagePicker: UIViewControllerRepresentable {
class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
let parent: ImagePicker
init(_ parent: ImagePicker) {
self.parent = parent
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let uiImage = info[.originalImage] as? UIImage {
parent.image = uiImage
}
parent.presentationMode.wrappedValue.dismiss()
}
}
@Environment(\.presentationMode) var presentationMode
@Binding var image: UIImage?
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {
}
}
Really appreciate the help!!