下标的模棱两可使用表示在其他地方工作的相同代码?

时间:2019-03-01 05:23:05

标签: ios swift firebase

我有从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)
}

我看过herehere,而其他人解决了我的问题。 这里的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

编译器不知道valueusers的类型,您提供了AnyObject含糊不清,因为它可以是数组(带索引的下标)或字典(带键的下标) )。

更具体些,告诉编译器value是字典,这样一来就应该总是Any而不是AnyObject并安全地检查类型

if let users = snapshot.value as? [String : [String:Any]] { ...