Firebase iOS — тип «LoginViewController» не соответствует протоколу «FUIAuthDelegate»

Я нахожусь в процессе интеграции пользовательского интерфейса Firebase Auth в свое приложение, и по какой-то причине я продолжаю получать эту ошибку:

Type 'LoginViewController' does not conform to protocol 'FUIAuthDelegate'

Прежде чем вы начнете минусовать меня до забвения, я обещаю, что я не идиот. FUIAuthDelegate имеет только одну обязательную функцию, которая указана ниже в инспекторе задач:

Protocol requires function 'authUI(_:didSignInWith:error:)' with type '(FUIAuth, User?, Error?) -> Void'; do you want to add a stub?

А потом это:

Candidate has non-matching type '(FUIAuth, User?, Error?) -> ()'

Дело в том, что у меня есть эта функция в моем классе, и я совершенно уверен, что соответствую протоколу... вот мой код ViewController:

import UIKit
import FirebaseAuth
import FirebaseAuthUI


typealias FIRUser = FirebaseAuth.User

class LoginViewController: UIViewController {

    @IBOutlet weak var loginButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func loginButtonTapped(_ sender: Any) {
        print("Login Button Tapped")

        guard let authUI = FUIAuth.defaultAuthUI()
            else { return }

        authUI.delegate = self

        let authViewController = authUI.authViewController()
        present(authViewController, animated: true)    
    }
}
extension LoginViewController: FUIAuthDelegate {
    func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
        print("")
    }
}

Я сумасшедший? Может кто-нибудь сказать мне, что мне здесь не хватает?


person Luke Solomon    schedule 20.06.2017    source источник


Ответы (2)


Удалите протокол FUIAuthDelegate из расширения LoginViewController:

extension LoginViewController {
func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
    print("")
}

}

Я только что подтвердил, что когда я добавил FUIAuthProtocol в свое собственное приложение, я получил ту же ошибку, что и вы. Без него работает нормально.

person Jen Person    schedule 20.06.2017
comment
Любая идея, почему это может происходить? У меня есть друг, который использует Firebase sdk и не имеет этой проблемы. - person Luke Solomon; 22.06.2017
comment
Честно говоря, я не знаю; хотел бы я рассказать вам больше об этом! Ваш друг тоже использует FUIAuth на iOS? Вы оба используете одну и ту же версию SDK? - person Jen Person; 22.06.2017
comment
Мы смотрим на это сейчас, и похоже, что он использовал версию 4.0 FirebaseUI, а я использую самую последнюю версию. Он только что запустил обновление модуля, чтобы получить самую последнюю версию, и оно все еще работает для него. Я рад, что вы заметили ту же ошибку, потому что последние несколько дней я чувствовал себя сумасшедшим. - person Luke Solomon; 22.06.2017
comment
Я знаю, что Вы имеете ввиду! Я хотел бы иметь объяснение для вас. Я спрошу у разработчика, есть ли у него понимание. - person Jen Person; 22.06.2017
comment
Я посмотрел на это и, по-видимому, существует конфликт пространства имен. Вместо использования 'didSignInWith user: User?' функцию следует изменить на 'didSignInWith user: FirebaseAuth.User?' - person Luke Solomon; 22.06.2017
comment
Спасибо, что изучили это и сообщили мне! - person Jen Person; 22.06.2017

func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
    print("")
}

Замените это на

func authUI(_ authUI: FUIAuth, didSignInWith user: FirebaseAuth.User?, error: Error?) {
     print("")
}

Если определен другой класс User, это может вызвать конфликт. Заменив User -> FirebaseAuth.User, мы просто указываем, какой именно пользовательский класс следует использовать.

person Sameer    schedule 14.09.2017