【问题标题】:iOS - Converting String to DoubleiOS - 将字符串转换为双精度
【发布时间】:2018-11-05 15:18:21
【问题描述】:

所以我正在从火基础配置数据中获取并尝试对其进行操作。

这是我的结构:

struct FireBaseConfiguration: Codable {
 var updateTime: String = ""
 var iOSMinVersionForceUpdate: String = ""
 var iOSMinVersionMessageUpdate: String = ""
 var iOSMinFirmwareVersion: String = ""
 var privacyPolicyUrlFireBase: String = ""
 var termOfUseUrlFireBase: String = ""
}

这是我的解析器方法:

func fireBaseConfigVersionMapParser(dataString: String, version: String) -> FireBaseConfiguration? {

    var fireBaseConfiguration: FireBaseConfiguration?

    let data = dataString.data(using: .utf8)!

    do {
        if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? NSDictionary {

           let model = jsonArray.object(forKey: version)

            let data = try JSONSerialization.data(withJSONObject: model!, options: .prettyPrinted)

            do {
             let parsedModel = try JSONDecoder().decode(FireBaseConfiguration.self, from: data)
                print("parsedModel is: \(parsedModel)")
                fireBaseConfiguration = parsedModel
            } catch let error{
                print(error)
            }
        } else {
            print("bad json")
        }

    } catch let error{
        print(error)
    }
    return fireBaseConfiguration
}

这是在vc中的实现:

 self.remoteConfig?.fetch(withExpirationDuration: 0, completionHandler: { [unowned self] (status, error) in
        if status == .success {
            self.remoteConfig?.activateFetched()

            guard let configVersionMap = self.remoteConfig?.configValue(forKey: "iOSConfigVersionMap").stringValue else { return }

            if let configModel = self.parser.fireBaseConfigVersionMapParser(dataString: configVersionMap, version: self.getCurrentAppVersion()!) {

                print(configModel)
                print(configModel.iOSMinVersionForceUpdate)
                print(configModel.iOSMinVersionMessageUpdate)
                                    var doubleForceUpdate = Double(configModel.iOSMinVersionForceUpdate)
                var doubleMessageUpdate = Double(configModel.iOSMinVersionMessageUpdate)

                print(doubleForceUpdate)
                print(doubleMessageUpdate)

            }
      } else {
                  print("Config not fetched")
                  print("Error: \(error?.localizedDescription ?? "No error available.")")
        }
    })

所以印刷品是这样的:

FireBaseConfiguration(updateTime:“13/7/2018”,iOSMinVersionForceUpdate:“1.0.2”,iOSMinVersionMessageUpdate:“1.0.2”,iOSMinFirmwareVersion:“1.0.1”,privacyPolicyUrlFireBase:“https://www.name.com/corporate/privacy-policy”,termOfUseUrlFireBase:“ https://www.name.com/corporate/terms-of-use")

1.0.2 1.0.2 零 无

有什么想法吗?

【问题讨论】:

  • "1.0.2" 不能转换为 Double,因此采用字符串的 Double 初始化程序只返回 nil
  • 那么你的建议是什么,为什么它不能转换?这是一个简单的字符串
  • 是的,很简单 String... 但它不是 DoubleDouble 值没有两个小数点。我认为您可能正在寻找的是:Compare two version strings in Swift
  • 你说得对,有什么建议可以在两个版本之间进行检查吗?我应该把什么转换成刺痛
  • stackoverflow.com/questions/1978456/… 或来自@Scriptable 评论的链接。

标签: swift string firebase double firebase-remote-config


【解决方案1】:

这是一个简单的String,但它实际上不是一个有效的DoubleDouble 值没有两位小数)。所以这就是它失败的原因。

我认为你真正需要的是比较版本号的能力,网站上还有许多其他答案可以告诉你如何做到这一点:

所以您可以将版本号保留为String

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多