Ошибка «Значение типа AuthDataResult» не имеет члена «uid» - PullRequest
0 голосов
/ 13 мая 2018

Может кто-нибудь помочь мне об этой проблеме?Первой ошибкой было «значение типа« authdataresult »не имеет члена uid».

Auth.auth()?.signIn(withEmail: email, password: password, completion:

Поэтому я удалил знак вопроса, чтобы решить проблему, и это сработало!Но после этого пришла другая ошибка, в которой говорилось: «Значение типа AuthDataResult не имеет члена uid».Я знаю, это раздражает.

self.userUid = user.uid

И, о, есть еще одна ошибка, и она была в моем проекте очень долгое время, так что теперь я игнорирую это, но если кто-то знает, как это исправить, пожалуйста, дайте мнея знаю.Ошибка заключается в том, что «только методы экземпляра могут быть объявлены @ibaction».

@IBAction func signInTapped(_ sender: Any) {

Я не знаю, почему, но, возможно, 3 ошибки связаны.Я не знаю.Помогите.Так что теперь я снова застрял.Вот весь запутанный код.

import UIKit
import Firebase

class ViewController: UIViewController {
    @IBOutlet weak var emailField: UITextField!
    @IBOutlet weak var passwordField: UITextField!

    var userUid: String!

    func goToCreateUserVC(){
        performSegue(withIdentifier: "SignUp", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "SignUp" {
            if let destination = segue.destination as? userVC {
                if userUid != nil {
                    destination.userUid = userUid
                }
                if emailField.text != nil {
                    destination.emailField = emailField.text
                }
                if passwordField.text != nil {
                    destination.passwordField = passwordField.text
                }
            }
        }

        @IBAction func signInTapped(_ sender: Any) {
            if let email = emailField.text, let password = passwordField.text {
                Auth.auth().signIn(withEmail: email, password: password, completion: { (user,error) in
                    if error == nil {
                        if let user = user {
                            self.userUid = user.uid
                            self.goToCreateUserVC()
                        }
                    } else {
                        self.goToCreateUserVC()
                    }
                });
            }
        }
    }
}

Как я клянусь, я пытался это исправить, и тогда 9 ошибок просто выскочили.Кстати, я использую Xcode 9, Swift 4, и мои Cocoapods обновлены.Для тех, кто окружает людей, которые редактируют, комментируют или судят вопросы, пожалуйста, это не повторяющийся вопрос.Это 2 разные ошибки.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Новые методы Auth.auth().signIn и Auth.auth().createUser используют тип данных AuthDataResult? вместо User?

Старый обратный вызов был пользователем типа: User?

Auth.auth().signIn(withEmail: email, password: password, completion: { (user: User?, error) in

Вы бы обращались к свойствам непосредственно к объекту пользователя обратного вызова, например:

if error == nil {
    if let user = user {
        self.userUid = user.uid
        // user.email for the email address in firebase
    }
}

Новый обратный вызов является authDataResult типа: AuthDataResult?

Auth.auth().signIn(withEmail: email, password: password, completion: { (authDataResult: AuthDataResult?, error) in

Теперь вы обращаетесь к свойствам непосредственно наобъект обратного вызова authDataResult, такой как:

if error == nil {
    if let authDataResult = authDataResult {
        self.userUid = authDataResult.user.uid
        // authDataResult.user.email for the email address in firebase
    }
}

По сути, объект пользователя из старого способа теперь является свойством объекта authDataResult, и вы можете получить uid через него:

authDataResult.user.uid

Информация Firebase об AuthDataResult

0 голосов
/ 10 мая 2019
guard let uid = user?.user.uid else {return}
let ref = Database.database().reference(fromURL: "")
let usersReference = ref.child("users").child(uid)
0 голосов
/ 18 мая 2018

Похоже, что Google внес некоторые изменения в Firebase Auth с обновлением 5.0.0. Это сработало для меня:

self.userUid = user.user.uid

Я не уверен, в чем был смысл изменения, но он все еще работает точно так же.

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