iOS - преобразование строки в двойной - PullRequest
0 голосов
/ 05 ноября 2018

Итак, я извлекаю данные конфигурации базы огня и пытаюсь ими манипулировать.

Это моя структура:

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: «* 101U * Термин «https://www.name.com/corporate/terms-of-use")

1.0.2 1.0.2 ноль ноль

есть идеи?

1 Ответ

0 голосов
/ 05 ноября 2018

Это простой String, но на самом деле он не является действительным Double (значения Double не имеют двух десятичных разрядов). Вот почему это терпит неудачу.

Мне кажется, что вам на самом деле нужна способность сравнивать номера версий, на сайте есть ряд других ответов, которые могут показать вам, как это сделать:

Таким образом, вы можете сохранить номера версий как String

...