My ImagePicker works as expected. However, I'm trying to implement camera permission handling and I seem to have gotten stuck. I am receiving the error: "Missing return in function expected return UIImagePickerController" and rightfully so. I am not sure where else I can put the switch statement to carry out the handling. Any help is appreciated.
struct ImagePicker: UIViewControllerRepresentable {
var sourceType: UIImagePickerController.SourceType = .photoLibrary
@Binding var selectedImage: UIImage
@Binding var alertCameraAccessNeeded: Bool
@Environment(\.presentationMode) private var presentationMode
@EnvironmentObject private var userManager: UserManager
let cameraAuthStatus = AVCaptureDevice.authorizationStatus(for: .video)
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
switch cameraAuthStatus {
case .notDetermined: requestCameraPermission()
case .authorized:
let imagePicker = UIImagePickerController()
imagePicker.delegate = context.coordinator
imagePicker.allowsEditing = true
imagePicker.sourceType = sourceType
return imagePicker
case .restricted, .denied: self.alertCameraAccessNeeded = true
@unknown default:
fatalError()
}
}
func requestCameraPermission() {
AVCaptureDevice.requestAccess(for: .video, completionHandler: {accessGranted in
guard accessGranted == true else { return }
})
}
func makeCoordinator() -> Coordinator {
Coordinator(self, userManager: userManager)
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {
}
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
let parent: ImagePicker
let userManager: UserManager
init(_ parent: ImagePicker, userManager: UserManager) {
self.parent = parent
self.userManager = userManager
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[.editedImage] as? UIImage {
parent.selectedImage = image
userManager.uploadProfilePicture(image: image)
}
parent.presentationMode.wrappedValue.dismiss()
}
}
}