小编典典

更新为Swift 3后,类型'Any'没有下标成员

swift

这是我在Swift中的代码:

currentUserFirebaseReference.observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in
        let UID = snapshot.key
        let pictureURL = snapshot.value!["pictureURL"] as! String
        let name = snapshot.value!["displayname"] as! String
        let currentUser = Person(name: name, bio: "", UID: UID, pictureURL: pictureURL)
        self.currentUserInfo = currentUser
            })

我刚刚更新到Xcode 8 / Swift 3,这似乎引起了以下错误消息:

“类型’Any’没有下标成员”

我在代码中的许多地方调用snapshot.value!["插入某些内容"],但出现此错误,并且我无法运行代码。

以下代码有效:

let pic = (snapshot.value as? NSDictionary)?["pictureURL"] as? String ?? ""

但是,与以前相比,现在看不到发生了什么变化或什么使它成为必需。

据我所知,唯一改变的是观察的语法,但是我不明白为什么这会导致我的代码停止工作。


阅读 217

收藏
2020-07-07

共1个答案

小编典典

FIRDataSnapshot中value类型为id

Swift 3中id作为导入Any

在火力地堡文档,它说value可以是任意的NSDictionaryNSArrayNSNumber,或NSString-显然,下标无厘头对所有这些,尤其是斯威夫特。如果您知道这是NSDictionary您的情况,则应将其强制转换为该值。

2020-07-07