我有从firebase检索用户的代码。问题是我得到了错误:
模棱两可地使用“下标”
在线路上,我在下面的方框中进行了标记。奇怪的是,在几乎相同的情况下,当前完全相同的代码位于另一个项目中,并且没有得到此错误。
代码如下:
func retriveUsers() {
let ref = Database.database().reference()
ref.child("user2").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in
let users = snapshot.value as! [String : AnyObject]
self.users.removeAll()
for (_, value) in users {
if let uid = value["uid"] as? String {//Error
if uid != Auth.auth().currentUser?.uid {
let userToShow = User()
if let fullName = value["full name"] as? String {//Error
userToShow.fullName = fullName
userToShow.userID = uid
self.users.append(userToShow)
}
}
}
}
})
print(users.count, " This is the number of users retrived the first looks like: ", users[0].userID)
}
答案 0 :(得分:1)
编译器不知道value
中users
的类型,您提供了AnyObject
含糊不清,因为它可以是数组(带索引的下标)或字典(带键的下标) )。
更具体些,告诉编译器value
是字典,这样一来就应该总是Any
而不是AnyObject
并安全地检查类型
if let users = snapshot.value as? [String : [String:Any]] { ...