Ios 从FIRRemoteConfigValue转换为不相关类型字符串始终失败:Firebase、Swift

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

我知道这是一个复制品。但公认的答案是,这只是一个bug

但我不这么认为

根据另一种解决方案,每次检索或实例化变量时,我都必须强制转换数据类型。我希望找到一个不同的、优雅的解决方案

一切正常,但在我安装了“FirebaseRemoteConfig”Pod后,我在每一行实例化一个带有快照值的变量时都会收到此警告

从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
                        } 
                    }
                }
            }
        })
工作代码

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类型,这使我达到了第一步。但是谢谢你的回答