Паттерн Coordinator связывает UIKit и SwiftUI, обеспечивая императивное управление навигацией, которое SwiftUI не может предоставить самостоятельно. Он часто используется для интеграции компонентов UIKit, таких как UIImagePickerController, в иерархию представлений SwiftUI.
UIViewControllerRepresentable, чтобы обернуть контроллер представления UIKitmakeUIViewController для создания и конфигурации компонента UIKitupdateUIViewController для обработки изменений состояния SwiftUICoordinator, который будет выступать делегатом и обрабатывать колбэки из UIKitstruct ImagePicker: UIViewControllerRepresentable {
class Coordinator: NSObject, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {
func imagePickerController(
_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
// Handle selected image
}
}
func makeCoordinator() -> Coordinator {
Coordinator()
}
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController,
context: Context) {}
}
makeCoordinator() вызывается перед makeUIViewController, что гарантирует готовность координатора к назначению делегатомCoordinator обрабатывает колбэки делегата UIKit и может обновлять состояние SwiftUI через @BindingМетод makeCoordinator() вызывается после makeUIViewController(), что позволяет координатору получить доступ к инициализированному UIKit view controller.
Новый — ещё не проверен сообществом
Вы