从 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的主要内容,如果未能解决你的问题,请参考以下文章

将值从字符转换为数字或从数字转换为字符

从字符串转换日期时间时转换失败

Android 共享元素转换:将 ImageView 从圆形转换为矩形,然后再转换回来

请问:从字符串转换日期和/或时间时,转换失败。怎么修改

从字符串转换日期和/或时间并从日期中提取季度/年时转换失败

转换输入时间时从字符串转换日期和/或时间时转换失败 | SQL, SQLSRV