Ios 从FIRRemoteConfigValue转换为不相关类型字符串始终失败:Firebase、Swift
我知道这是一个复制品。但公认的答案是,这只是一个bug 但我不这么认为 根据另一种解决方案,每次检索或实例化变量时,我都必须强制转换数据类型。我希望找到一个不同的、优雅的解决方案 一切正常,但在我安装了“FirebaseRemoteConfig”Pod后,我在每一行实例化一个带有快照值的变量时都会收到此警告 从FIRRemoteConfigValue转换为不相关的类型字符串始终失败 当我运行我的应用程序时,它会在那里崩溃 错误代码Ios 从FIRRemoteConfigValue转换为不相关类型字符串始终失败:Firebase、Swift,ios,swift,firebase,firebase-realtime-database,firebase-remote-config,Ios,Swift,Firebase,Firebase Realtime Database,Firebase Remote Config,我知道这是一个复制品。但公认的答案是,这只是一个bug 但我不这么认为 根据另一种解决方案,每次检索或实例化变量时,我都必须强制转换数据类型。我希望找到一个不同的、优雅的解决方案 一切正常,但在我安装了“FirebaseRemoteConfig”Pod后,我在每一行实例化一个带有快照值的变量时都会收到此警告 从FIRRemoteConfigValue转换为不相关的类型字符串始终失败 当我运行我的应用程序时,它会在那里崩溃 错误代码 FIRDatabase.database().reference
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
}
}
}
}
})
工作代码
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
}
}
}
}
})
我正在寻求以下方面的解释:
- 安装FirebaseRemoteConfig Pod后发生了什么变化,它开始给我这个错误
- 为什么每次初始化变量时都需要强制强制转换
- 有更好的方法吗
- 终于找到了解决方案
使用
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
气候变暖不会再出现了
注意:如果您使用上述方法,那么旧代码也可以正常工作…最终得到了解决方案 使用
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
气候变暖不会再出现了
注意:如果您使用上述方法,那么旧代码也可以正常工作。强制强制转换要求可能是由于新的Swift 3行为不再隐式地将NSDictionary等目标C对象强制转换为Swift等效对象。您现在需要显式强制转换。我在使用swift2时也遇到了同样的问题,如果是这样的话,那么为什么只有在安装
FIRRemoteConfig
pod之后,强制强制转换要求可能是由于新的Swift 3行为不再隐式地将目标C对象(如NSDictionary)转换为Swift等价物。您现在需要显式强制转换。我在使用swift2时也遇到了同样的问题,如果是这样的话,那么为什么只有在安装了FIRRemoteConfig
pod之后,它才应该出现在那里。您的回答不是对我问题的回答。我在问您在某种程度上给出的警告背后的原因。其次,snapshot.value
(假设您将snapshot视为在completionBlock中检索到的快照)没有valueForKey
函数。要删除它,我必须将其转换为dictionary类型,这使我达到了第一步。但谢谢你的回答你的回答并不是对我问题的回答。我是在问你在某种程度上给出的警告背后的原因。其次,snapshot.value
(假设您将snapshot视为在completionBlock中检索到的快照)没有valueForKey
函数。要删除它,我必须将其转换为dictionary类型,这使我达到了第一步。但是谢谢你的回答