输入“用户?”没有成员 UID(Swift 3、Firebase)

Posted

技术标签:

【中文标题】输入“用户?”没有成员 UID(Swift 3、Firebase)【英文标题】:Type "user?" had no member UID (Swift 3, Firebase) 【发布时间】:2016-11-02 18:02:43 【问题描述】:

我正在使用 Firebase 设置登录页面,但遇到了 uid 无法识别的错误。这是我的代码:

    FIRAuth.auth()?.createUser(withEmail: email, password: password, completion:  (FIRUser,error) in

        if error != nil 
            print(error)
            return

        

        guard let uid = user?.uid else 
            return
        

我也无法通过命令单击进入FIRUser,但是如果我去掉了保护语句,身份验证就可以正常工作了。

我已经导入了 Firebase 和 FirebaseDatabase(无法导入 FirebaseAuth,被划掉了),所以不是这样。

知道为什么我不能访问FIRUser 和使用uid 吗?

【问题讨论】:

【参考方案1】:

您需要在闭包内创建变量user。改写你的函数。

FIRAuth.auth()?.createUser(withEmail: email, password: password, completion:  (user: FIRUser?, error: Error?) in

    if error != nil 
        print(error)
        return

    

    guard let uid = user?.uid else 
        return
    

【讨论】:

谢谢埃米尔!或者,我可以简单地将保护语句切换为使用 FIRUser 而不是用户吗?这样做是可行的,但作为一个初学者,我不确定我是否以这种方式而不是你的方式搞砸了其他东西。再次感谢! @d0xi45 user 已经是 FIRUser 类型,如我更新的答案所示。当您将其写为(user, error) 而不是我的答案时,您只是选择不指定变量的类型。它喜欢做var x: Int = 5var x = 5。它们都是Int 类型,但它的编码风格。创建完成后,FIRUser.currentUser 也会更新。不同之处在于user 是一个局部变量,而FIRUser.currentUser 是全局变量,因此可以在您的应用程序中的任何位置访问。如果它有助于解决您的问题,请不要忘记接受并支持答案:)

以上是关于输入“用户?”没有成员 UID(Swift 3、Firebase)的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - 类型'Any'没有下标成员

类型'URL'没有成员'fileURL' - Swift 3

Swift 3 - 'Any?' 类型的值没有成员“valueForKey”

“任何”的值类型没有成员 'objectforKey' Swift 3 转换

类型'Any'没有下标成员Swift 3

swift 3 Type 'Any' 没有下标成员? [复制]