从 FIRRemoteConfigValue 转换为不相关的字符串类型总是失败:Firebase、Swift
Posted
技术标签:
【中文标题】从 FIRRemoteConfigValue 转换为不相关的字符串类型总是失败:Firebase、Swift【英文标题】:Cast from FIRRemoteConfigValue to unrelated type String always fails : Firebase, Swift 【发布时间】:2016-10-10 12:01:01 【问题描述】:我知道这是Cast from FIRRemoteConfigValue to unrelated type String always fails 的重复。但公认的答案是它只是一个错误。
我认为不是。
根据另一种解决方案,我必须在每次检索或实例化变量时强制转换数据类型。我希望找到一个不同而优雅的解决方案。
一切正常,但在我安装 Pod 'FirebaseRemoteConfig'
后,我在用收到的快照值实例化变量的每一行都收到此警告。
从 FIRRemoteConfigValue 转换为不相关的字符串类型总是失败
当我运行我的应用程序时,它会在那里崩溃。
错误代码
FIRDatabase.database().reference().child("Posts").observe(.value, with: (recievedSnap) in
if recievedSnap.exists()
if let dict = recievedSnap.value as? [String:AnyObject]
for each in dict
let str = each.value["text"] as! String //Line of warning(and crash when the app is run)
)
工作代码
FIRDatabase.database().reference().child("Posts").observe(.value, with: (recievedSnap) in
if recievedSnap.exists()
if let dict = recievedSnap.value as? [String:AnyObject]
for each in dict
if let eachValue = each.value as? [String:AnyObject]
let str = eachValue["text"] as! String
)
我正在寻找以下方面的解释:
Pod 'FirebaseRemoteConfig'
安装后开始出现此错误的原因是什么?
为什么每次初始化变量时都需要强制转换?
有更好的方法吗?
【问题讨论】:
强制转换要求可能是由于新的 Swift 3 行为不再将诸如 NSDictionary 之类的 Objective C 对象隐式转换为 Swift 等效项。您现在需要显式转换。 我在使用 swift2 时遇到了同样的问题,如果是这种情况,那么为什么只有在安装FIRRemoteConfig
pod 之后,它之前也应该存在。
【参考方案1】:
终于找到解决办法了……
使用valueForKey
而不是[]
括号访问值,因为FIRRemoteConfigValue
不支持使用[]
访问值
然后所有的价值都消失了……
举例
Warning code...
下面的代码给出警告...
let id = snapshot.value!["senderId"] as! String
let text = snapshot.value!["text"] as! String
let locationId = snapshot.value!["location"] as! String
这样使用
let id = snapshot.value.valueForKey("senderId") as! String
let text = snapshot.value.valueForKey("text") as! String
let locationId = snapshot.value.valueForKey("location") as! String
变暖不会再出现了.....
注意:如果您像上面那样使用,那么旧代码也可以正常工作...
【讨论】:
你的回答不是我问题的答案。我在问你在某种程度上给出的这个警告背后的原因。其次,snapshot.value
(鉴于您正在考虑将 snapshot 作为在完成块中检索到的)没有valueForKey
函数。要删除它,我必须将其转换为字典类型,这使我陷入困境。不过谢谢你的回答以上是关于从 FIRRemoteConfigValue 转换为不相关的字符串类型总是失败:Firebase、Swift的主要内容,如果未能解决你的问题,请参考以下文章