Установка свойства в отдельном контроллере представления с использованием метода делегата от другого V C - Swift - PullRequest
0 голосов
/ 06 марта 2020

Я использую Auth0 для аутентификации пользователей в приложении. Логин auth0 определен в BaseViewController. После проверки подлинности мне нужно обновить информацию в LoginViewController с подробностями, полученными из проверки подлинности.

Итак, у меня есть:

import UIKit
import SwiftValidator
import Lock
import Auth0

protocol BaseViewControllerDelegate: class {
    func getName()
}

class BaseViewController {

    weak var delegate: BaseViewControllertDelegate?

    var validator = Validator()

    override func viewWillAppear(_ animated: Bool) {
        loadAuth0LoginPage()
    }

    func loadAuth0LoginPage() {
        Lock
        .classic()

        .withOptions {
          $0.oidcConformant = true
          $0.scope = "openid profile"
        }

        .withStyle {
            $0.logo = LazyImage(name: "*****")
            $0.primaryColor = UIColor(red: 0.93, green: 0.573, blue: 0, alpha: 1.0)
            $0.headerColor = UIColor.i6.darkGrey
        }

        .onAuth { credentials in
            self.getUserProfile(credentials: credentials)

        }
        .present(from: self)
    }

    func getUserProfile(credentials: Credentials) {
        guard let accessToken = credentials.accessToken else { return }
        Auth0
            .authentication()
            .userInfo(withAccessToken: accessToken)
            .start { result in
                switch result {
                case .success(let profile):
                    self.delegate?.getName()

                case .failure(let error):
                    print("Error")
                }
        }
    }
}

А затем на LoginViewController:

import UIKit
import SwiftValidator
import Lock

class LoginViewController: BaseViewController, BaseViewControllerDelegate {
    func getName() {
        print("get name")
    }

    var baseVC: BaseViewController

    init() {
        self.baseVC = BaseViewController()
        super.init(nibName: nil, bundle: nil)
        baseVC.delegate = self
    }

Итак, я устанавливаю протокол на BaseViewController и создаю свойство делегата. Затем я вызываю метод, как только oAuth сделал свое дело. В LoginViewController я принимаю протокол и определяю необходимый метод. Я полагаю, что, где я иду не так, я создаю экземпляр BaseViewController, а затем назначаю делегата себе, но я немного застрял в том, где эта часть должна go. Любая помощь будет принята с благодарностью.

...