我正在尝试显示来自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 ?? ""
}
}
答案 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 Database或fetch 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
}