模糊地使用'下标'会使相同的代码在其他地方工作吗?

问题描述 投票:-1回答:1

我有从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和neiother解决了我的问题。这里有什么解决方案?

ios swift firebase
1个回答
1
投票

编译器不知道valueusers的类型,你提供的AnyObject是不明确的,因为它既可以是数组(索引下标)也可以是字典(密钥下标)。

更具体一点,并告诉编译器value是一个字典,顺便说一下它总是应该是Any而不是AnyObject并安全检查类型

if let users = snapshot.value as? [String : [String:Any]] { ...
© www.soinside.com 2019 - 2024. All rights reserved.