Facebook Войти с шаблоном MVVM - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь выучить 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 голосов
/ 15 марта 2019

Похоже, вы проделали довольно хорошую работу по внедрению MVVM здесь!Общее правило MVVM заключается в том, что если бы вы удалили все «визуальные элементы» из контроллера представления, он выглядел бы идентично вашей модели представления (т. Е. Модель представления содержит всю информацию).К сожалению, API здесь затрудняет передачу контроллера представления напрямую его модели.Один из возможных вариантов - заставить модель представления реализовать протокол делегата модели представления ...

protocol viewModelDelegate { func getViewController() -> viewController }

Контроллер представления должен реализовать этот протокол и вернуть self.Затем вы можете получить свой контроллер представления, вызвав delegate?.getViewController().

Честно говоря, этот вид злоупотребляет шаблоном делегата и технически все еще передает TYPE контроллера представления в модель представления, ха-ха, так что это может быть нелучший вариант для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...