使用MVVM模式登录Facebook

时间:2019-03-15 07:38:45

标签: swift mvvm

我正在尝试学习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

的想法或规则吗?

1 个答案:

答案 0 :(得分:0)

看来您在这里实现MVVM做得很好! MVVM的一般规则是,如果要从视图控制器中剥离所有“视觉效果”,则其外观将与视图模型相同(即:视图模型包含所有信息)。不幸的是,这里的API使得避免避免将视图控制器直接传递到其模型变得很困难。一种可能的选择是让视图模型实现视图模型委托协议...

protocol viewModelDelegate { func getViewController() -> viewController }

视图控制器应实现此协议并返回self。然后,您可以通过调用delegate?.getViewController()来获取视图控制器。

老实说,这种滥用委托模式,并且从技术上讲仍然将视图控制器TYPE传递给视图模型haha,所以这可能不是您的最佳选择!