iOS - 将字符串转换为双精度浮点数

3
所以我正在从Firebase获取配置数据,并尝试进行操作。
这是我的结构体:

```

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: "2018年7月13日", 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 空 空

有什么想法吗?


4
"1.0.2" 无法转换为 Double 类型,因此接受字符串作为参数的 Double 初始化方法只会返回 nil - Andreas Oetjen
那么你建议什么,为什么它不能转换? 这只是一个简单的字符串。 - ironRoei
3
是的,它是一个简单的String,但它不是一个DoubleDouble数值没有两个小数点。我认为你可能在寻找的是:在Swift中比较两个版本字符串 - Scriptable
你说得对,有什么建议可以检查两个版本之间的区别吗?我应该将其转换为字符串。 - ironRoei
1
请查看@Scriptable评论中的链接:https://dev59.com/4XI-5IYBdhLWcg3wMFMf - Larme
1个回答

1
这是一个简单的“String”,但它实际上不是有效的“Double”(“Double”值没有两个小数位)。所以这就是为什么它失败的原因。
我认为你实际上需要的是比较版本号的能力,网站上有很多其他答案可以向你展示如何做到这一点:
- 在Swift中比较两个版本字符串 - 在Objective-C中比较版本号 所以你可以把你的版本号保留为“String”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接