我有从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)
}
编译器不知道value
中users
的类型,你提供的AnyObject
是不明确的,因为它既可以是数组(索引下标)也可以是字典(密钥下标)。
更具体一点,并告诉编译器value
是一个字典,顺便说一下它总是应该是Any
而不是AnyObject
并安全检查类型
if let users = snapshot.value as? [String : [String:Any]] { ...