我正在尝试学习MVVM
,这对我来说很难从MVC
迁移到MVVM
我正在使用Facebook Login。这是我设置我的代码的地方:
在ViewController
内部:
fileprivate func facebookLoginAction(){
self.viewModel.performFacebookLogin(rootVC: self)
}
在ViewModel
内部:
func performFacebookLogin(rootVC: UIViewController) {
let fbLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["email"], from: rootVC) { [weak self] (result, err) in
if let err = err {
print(err.localizedDescription)
return
}
guard let result = result else {return}
if result.isCancelled {
return
}
if (result.grantedPermissions.contains("email")) {
self?.getFacebookUserData()
}
}
}
这是可行的,但是我不确定我在做正确的MVVM
模式,因为我正在将ViewController
传递给ViewModel
。
您能给我一些MVVM
答案 0 :(得分:0)
看来您在这里实现MVVM做得很好! MVVM的一般规则是,如果要从视图控制器中剥离所有“视觉效果”,则其外观将与视图模型相同(即:视图模型包含所有信息)。不幸的是,这里的API使得避免避免将视图控制器直接传递到其模型变得很困难。一种可能的选择是让视图模型实现视图模型委托协议...
protocol viewModelDelegate {
func getViewController() -> viewController
}
视图控制器应实现此协议并返回self。然后,您可以通过调用delegate?.getViewController()
来获取视图控制器。
老实说,这种滥用委托模式,并且从技术上讲仍然将视图控制器TYPE传递给视图模型haha,所以这可能不是您的最佳选择!