场景:
我有一个简单的 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)
,当被调用时会显示一个允许用户登录到 twitter 的 safari 控制器。但是,要调用authorize
您需要传入一个符合SFSafariViewControllerDelegate
. 从我目前的基本理解来看View
,SwiftUI 中的类型不是视图控制器,而且SFSafariViewControllerDelegate
由于它是结构体,因此不符合。
我查看了Apples 网站上的与 UIKit 接口教程,他们似乎创建了一个UIViewControllerRepresentable
类型,然后从View
类型中返回这个“控制器body
” View
。这允许他们使用 UIKit 中的 PageViewController。但是,这并不完全是我拥有或需要的用例。我只需要能够以某种方式将我的简单View
转换为UIViewController
. 将是在这里使用的东西,如果UIHostingController
是这样,如何注入这种依赖关系,或者视图是否应该知道/使用控制器?
我的困惑主要在于还不知道 SwiftUI 的最佳实践是什么。该View
类型似乎取代了UIViewController
UIKit 中的使用,但是当与 UIKit 交互时,转换是如何工作的呢?
如果有人有任何想法或想讨论这个,我将不胜感激!谢谢。