Сценарий:
У меня есть простое представление SwiftUI, которое выглядит так:
struct AuthView: View {
var body: some View {
VStack {
Button(action: handleLogin) {
Text("Login to twitter")
}
}
}
private func handleLogin() {
// do login stuff here
}
}
Теперь, в идеале, в функции handleLogin
я бы просто выполнял запрос OAuth и обрабатывал вход в систему и т. Д. Однако я использую библиотеку, найденную на GitHub, для демонстрационных целей.
В этой библиотеке есть метод authorize(callBackUrl: URL, presentingController: UIViewController)
, который при вызове представляет контроллер safari, который позволяет пользователю войти в твиттер. Однако для вызова authorize
вам нужно передать контроллер, соответствующий SFSafariViewControllerDelegate
. Из моего текущего базового понимания является то, что тип View
из SwiftUI не является контроллером представления и, более того, не может соответствовать SFSafariViewControllerDelegate
, так как это структура.
Я посмотрел учебник Взаимодействие с UIKit с сайта Apple, и они, похоже, создают тип UIViewControllerRepresentable
, а затем из типа View
возвращают этот "контроллер" в body
из View
. Это позволяет им использовать PageViewController из UIKit. Тем не менее, это не совсем тот случай использования, который мне нужен или нужен. Мне просто нужно иметь возможность каким-то образом преобразовать мой простой View
в UIViewController
. Будет ли UIHostingController
использоваться здесь, и если да, то как эта зависимость будет внедрена, или представление должно даже знать / использовать контроллер?
Главным образом мое замешательство заключается в том, что я еще не знаю, каковы лучшие практики SwiftUI. Тип View
, кажется, заменяет использование UIViewController
в UIKit, но тогда как конвертация работает при взаимодействии с UIKit?
Если у кого-то есть идеи или они хотели бы обсудить это, я был бы признателен! Спасибо.