Ios 如何在MVVM中使用UIAlertController?
我有一个VC,代码显示警报:Ios 如何在MVVM中使用UIAlertController?,ios,swift,mvvm,uialertcontroller,Ios,Swift,Mvvm,Uialertcontroller,我有一个VC,代码显示警报: func showMessage() { let alertView = UIAlertController(title: "TEST", message: self.loginViewModel.errorText, preferredStyle: .alert) alertView.addActi
func showMessage() {
let alertView = UIAlertController(title: "TEST",
message: self.loginViewModel.errorText,
preferredStyle: .alert)
alertView.addAction(UIAlertAction(title: "Ok", style: .destructive, handler: nil))
present(alertView, animated: true, completion: nil)
}
我的viewModel中有这个登录逻辑,需要触发这个函数:
func submitLoginRequest(userLogin: String, loginPassword: String, loginSecret: String, deviceToken: String) {
let userLogin = UserServices.init()
manager.userServicesApiRequest(url: Endpoints.login, request: userLogin) { (data, error) in
if let data = data {
let status = data["status"].stringValue
if status == "success" {
guard let userObject = UserProfileModel.init(data) else { return }
let encodedUserObject: Data = NSKeyedArchiver.archivedData(withRootObject: userObject)
UserDefaults.standard.set(encodedUserObject, forKey: "userProfile")
print("Login Succeeded") self.coordinatorDelegate?.loginViewModelDidLogin(viewModel: self)
} else {
self.errorText = data["reason"].stringValue
// here is where the controller needs calling!
}
}
我想知道我应该如何让它们正确地交互,以在VM案例发生时触发VC?在这一点上,您应该调用类似于
self.coordinatorDelegate?.loginViewModeldFailtoLogin()
的东西,并让它处理它。这是我的想法,但是我该如何让协调员访问/处理viewcontroller?另一位代表?就个人而言,我认为MVVM在iOS上是浪费时间,除非您使用的是数据绑定框架。MVVM来自Windows,在Windows中通过WPF具有内置的数据绑定功能。实际上,您的视图模型无论如何都不应该执行登录,这是模型的责任,视图模型只是公开模型的相关属性以启用数据绑定。视图协调器需要向视图(在iOS的情况下,它将是UIViewController)建议可以显示警报的失败登录。是的,这将是通过授权。我确实有rxSwift,但我是新手,所以不总是使用它。那么登录函数应该在模型类内部调用?VC处理通过委托触发的警报控制器?你可以有一个API对象;它对API进行建模/抽象。它不是“业务逻辑”,但它有代码来实现数据模型和网络api之间的适配器模式。