let employerName = snapshot.value! ["employerName"] as! String let employerImage = snapshot.value! ["employerImage"] as! String let uid = snapshot.value! ["uid"] as! String
我查看了以前的文章,但似乎找不到解决此问题的方法。所有三行代码都给出“类型’Any’没有下标成员”错误。对此还很陌生,因此不胜感激。
snapshot.value的类型为Any。下标是一种特殊的函数,它使用将值括在大括号中的语法。此下标功能由实现Dictionary。
snapshot.value
Any
Dictionary
因此,这里发生的是,作为开发人员的YOU知道这snapshot.value是一个Dictionary,但是编译器却没有。它不会让您调用该subscript函数,因为您试图在type的值上调用它Any并且Any未实现subscript。为此,您必须告诉编译器您snapshot.value实际上是一个Dictionary。此外,还Dictionary可以让您将下标函数与Dictionary键的类型无关。因此,您需要告诉它您有一个Dictionary带有String(AKA [String: Any])的键。会比这还要进一步,你的情况,你似乎知道,都在你的价值观Dictionary是String一样,所以代替铸造每个值,你就下标后String使用as! String,如果只是告诉您同时Dictionary 具有两种String类型的键和值(AKA [String: String]),那么您将可以通过下标访问这些值,并且编译器将知道这些值String也是!
subscript
String
[String: Any]
as! String
[String: String]
guard let snapshotDict = snapshot.value as? [String: String] else { // Do something to handle the error // if your snapshot.value isn't the type you thought it was going to be. } let employerName = snapshotDict["employerName"] let employerImage = snapshotDict["employerImage"] let uid = snapshotDict["fid"]
在那里,您拥有了!