Как мне преобразовать информацию, полученную в JSON, в ДВОЙНОЙ, чтобы я мог правильно использовать информацию? - PullRequest
0 голосов
/ 23 февраля 2019

Произошла ошибка

Структура, в которую я поместил данные

Вызов функции, которая получила информацию json впервое место

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

Я пишу подключенное автомобильное приложение, используя Smart Car API.У меня есть файл node.js, работающий на heroku, и быстрый интерфейс 4, который я запускаю на своем ipad.

Когда я компилирую приложение для запуска на моем ipad, оно работает нормально.Он проходит процесс аутентификации, но что происходит, я получаю эту ошибку

Поток 1: EXC_BREAKPOINT (код = 1, субкод = 0x100f16054)

на первом из них прямо здесь

var carLatitude: Double = carInfo.latitude as!Double

var carLongitude: Double = carInfo. Longitude as!Double

Как видно из кода ниже, я создаю структуру с именем code data.Затем в «Alamofire.request (» (Constants.appServer) / location »« я получаю документ json и сохраняю его в экземпляр структуры carData с именем «teslaCar»

Затем сохраняю «teslaCar»в структуру "carInfo", чтобы перевести ее в другое представление.

Затем я пытаюсь просто преобразовать carInfo.latitude и carInfo.longitude в переменную и превратить ее в double. У меня самая сложная проблема вмир переносит широту и долготу в двойное число. Как только оно будет передано правильно, я отобразлю его на карте.

Может кто-нибудь сказать мне, как сделать эту работу?

    import Alamofire
import UIKit
import SmartcarAuth
import SwiftyJSON

struct carData {
    var make: String = ""
    var model: String = ""
    var year: String = ""
    var latitude: String = ""
    var longitude: String = ""
    var odometer: String = ""
}


            Alamofire.request("\(Constants.appServer)/location", method: .get).responseJSON { response in
                switch response.result {
                case .success(let value):
                    let json = JSON(value)
                    print("JSON: \(json)")

                    let latitude = json["data"]["latitude"].stringValue
                    let longitude = json["data"]["longitude"].stringValue
                    let locationDeclaration = "Latitude: \(latitude) and Longitude: \(longitude)"
                    self.vehicleLocationText = locationDeclaration
                    print(json["data"]["latitude"])
                    print(json["data"]["longitude"])

                    self.teslaCar.latitude = latitude
                    self.teslaCar.longitude = longitude
                  /*   self.performSegue(withIdentifier: "displayVehicleInfo", sender: self)
 */
                case .failure(let error):
                    print(error)
                }


            }

        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if var destinationVC = segue.destination as? InfoViewController {
            destinationVC.carInfo = teslaCar

        }



       var carLatitude:Double = carInfo.latitude as! Double
        var carLongitude:Double = carInfo.longitude as! Double

Когда

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

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

Это снимок экрана операционной программы с iPad благодаря помощи @ vadian

Ответ состоит в том, чтобы написать этот код

       let carLatitude = Double(carInfo.latitude) ?? 0.0
    let carLongitude = Double(carInfo.longitude) ?? 0.0

        let initialLocation = CLLocation(latitude: carLatitude ?? 0.0, longitude: carLongitude ?? 0.0)

Было необходимо не только использовать метод и отправить переменную, которую я пытался преобразовать в качестве параметра, но также добавить ?? 0.0

, а затем, когда я передавал созданную мною переменную в функцию MapKit с именем "CLLocation", необходимо было добавить ?? 0.0

. По какой-то причине именно так вы делаете вещи, которые считаютсятип Any будет Any

Это ответ, насколько я могу описать.Есть лучшие способы объяснить это, это лучшее, что я могу сказать.

0 голосов
/ 23 февраля 2019

Пожалуйста, внимательно прочитайте сообщение об ошибке.

Приведение из String к несвязанному типу Double всегда терпит неудачу.

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

И, пожалуйста, прочтите также желтые предупреждения и рассмотрите предложения по объявлению неизменных var iables в качестве констант

let carLatitude = Double(carInfo.latitude) ?? 0.0
let carLongitude = Double(carInfo.longitude) ?? 0.0

Партия ?? 0.0 присваивает 0.0, если строковое значение не может быть преобразовано в Double

Для получения дополнительной информации о преобразовании типов, пожалуйста, прочитайте Руководство по основам языка Swift

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...