let employerName = snapshot.value! ["employerName"] as! String
let employerImage = snapshot.value! ["employerImage"] as! String
let uid = snapshot.value! ["uid"] as! String
我查看过以前的帖子,但似乎无法找到解决此问题的方法。所有三行代码都给出了"类型'任何'没有下标成员"错误。相当新的,所以任何帮助都表示赞赏。
答案 0 :(得分:1)
snapshot.value
的类型为Any
。下标是一种特殊的函数,它使用括号中的值括起来的语法。此下标函数由Dictionary
实现。
所以这里发生的事情是你作为开发人员知道snapshot.value
是Dictionary
,但编译器没有。它不会让您调用subscript
函数,因为您尝试使用Any
类型的值调用它,而Any
未实现subscript
。为此,您必须告诉编译器您的snapshot.value
实际上是Dictionary
。更多Dictionary
允许您使用带有Dictionary
键的任何类型值的下标函数。因此,您需要告诉它您的Dictionary
密钥为String
(AKA [String: Any]
)。更进一步,在你的情况下,你似乎知道Dictionary
中的所有值都是String
,所以不要在将每个值下标到{{1}之后}使用String
,如果您只是告诉它as! String
的键和值都是Dictionary
类型(AKA String
),那么您将可以下标到访问值,编译器也会知道值[String: String]
!
String
你有它!
答案 1 :(得分:0)
由于您希望将snapshot.value
视为未打包的字典,请尝试转换为1,如果成功,则使用该字典。
考虑类似的事情:
func findElements(candidate: Any) {
if let dict: [String : String] = candidate as? Dictionary {
print(dict["employerName"])
print(dict["employerImage"])
print(dict["uid"])
}
}
// Fake call
let snapshotValue = ["employerName" : "name", "employerImage" : "image", "uid" : "345"]
findElements(snapshotValue)