【发布时间】:2019-12-10 10:16:34
【问题描述】:
在我看来,Apple 是在鼓励我们放弃在 SwiftUI 中使用UIViewController,但不使用视图控制器,我感觉有点力不从心。我想要的是能够实现某种ViewModel,它将向View发出事件。
视图模型:
public protocol LoginViewModel: ViewModel {
var onError: PassthroughSubject<Error, Never> { get }
var onSuccessLogin: PassthroughSubject<Void, Never> { get }
}
查看:
public struct LoginView: View {
fileprivate let viewModel: LoginViewModel
public init(viewModel: LoginViewModel) {
self.viewModel = viewModel
}
public var body: some View {
NavigationView {
MasterView()
.onReceive(self.viewModel.onError, perform: self.handleError)
.onReceive(self.viewModel.onSuccessLogin, perform: self.handleSuccessfullLogin)
}
}
func handleSuccessfullLogin() {
//push next screen
}
func handleError(_ error: Error) {
//show alert
}
}
使用 SwiftUI,如果登录成功,我不知道如何推送另一个控制器
另外,如果您能提供任何关于如何以更好的方式实现我想要的东西的建议,我将不胜感激。谢谢。
【问题讨论】:
-
你是对的,如果你有一个
SwiftUI项目,恕我直言,如果你需要使用代表之类的东西或不(还) 在原生 SwiftUI 中可用。让我们从第一格开始;您的模型需要驱动视图,而不是相反。它可能应该是一个符合ObservableObject协议的类实例。 (请注意,这仍然是早期的测试版,并且在测试版 5 中发生了变化。) 至于接下来的两件事?一次问一个。显示代码。请注意,#2(显示警报)在这 5 个测试版中经历了三处更改。