尝试从FirebaseStorage显示我的用户的用户名

时间:2019-05-22 05:47:25

标签: ios swift firebase firebase-realtime-database

我正在尝试显示来自Firebase的用户名,但是下面这行代码:

self.userNameOut.text! = DataSnapshot.value!["username"] as? String

返回错误:

Cannot subscript a value of incorrect or ambiguous type

有人知道我为什么收到此错误吗?

任何帮助将不胜感激!

编辑: 我认为我与数据库的连接是错误的。

var loggedInUser = AnyObject?.none
var databaseRef = DatabaseReference()
var storageRef = StorageReference()````

        self.loggedInUser = Auth.auth().currentUser

    self.databaseRef.child("user_profiles").child(self.loggedInUser!.uid).observeSingleEvent(of: .value) { (snapshot:DataSnapshot) in

        if snapshot.exists() {
            if let userDict = snapshot.valueInExportFormat() as? Dictionary<String, AnyObject> {
                print(userDict["username"] as! String )
                self.userNameOut.text =  userDict["username"] as? String ?? ""
            }
        }

2 个答案:

答案 0 :(得分:0)

不确定为什么使用DataSnapshot.value,但是假设值不是nil,则可以像这样访问它,因为Firebase Database使用JSON树格式(键/值配对),这意味着您需要将强制类型snapshot.value键入dictionary

if let fbDictionary = DataSnapshot.value as? [String: AnyObject] {  
    let username = fbDictionary["username"] as! String 
} else {
    print("Error retrieving data, value nil?") 
}

通常,您想listen to changes in the Databasefetch one specific user knowing its ID。在这两种情况下,一旦有了有效的firebase数据快照,就可以像上面的示例一样通过Dictionary来访问其中的字段,例如username

答案 1 :(得分:0)

使用以下代码获取username,希望对您有所帮助。

if snapshot.exists() {
     if let userDict = snapshot.valueInExportFormat() as? Dictionary<String, AnyObject> {
          print(userDict["username"] as? String )
          self.userNameOut.text =  userDict["username"] as? String ?? ""
     }
} else {
    //Data not found
}