The structure I put the data in
The function call that got the json information in the first place
The information sent into another structure
我正在使用智能汽车API编写联网汽车应用程序。我有一个在heroku上运行的node.js后端,以及一个在ipad上运行的Swift 4前端。
当我编译要在ipad上运行的应用程序时,它运行良好。 它经历了身份验证过程,但是发生了什么错误
线程1:EXC_BREAKPOINT(代码= 1,子代码= 0x100f16054)
在这里的第一个
var carLatitude:Double = carInfo.latitude as!双重
var carLongitude:Double = carInfo.longitude作为!双
从下面的代码中可以看到,我创建了一个名为code data的结构。然后在“ Alamofire.request(“(Constants.appServer)/ location”,“ 我得到一个json文档,并将其保存到名为“ teslaCar”的结构carData的实例
然后我将“ teslaCar”保存到“ carInfo”结构中,以将其传输到另一个视图。
然后我尝试简单地将carInfo.latitude和carInfo.longitude变成一个变量,然后将其变成双精度型。在将纬度和经度转换为两倍的世界中,我遇到了最困难的麻烦。正确传输后,我将其显示在mapkit上。
有人可以告诉我如何进行这项工作吗?
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
何时
答案 0 :(得分:0)
请仔细阅读错误消息。
从
String
到不相关类型Double
的投射始终失败。
如果您不能转换一个类型,则必须使用初始化方法来转换该类型。
还请阅读黄色警告,并考虑将未变异的 var iable声明为常量的建议
let carLatitude = Double(carInfo.latitude) ?? 0.0
let carLongitude = Double(carInfo.longitude) ?? 0.0
如果字符串值不能转换为?? 0.0
,则0.0
部分将分配Double
有关类型转换的更多信息,请阅读The Basics in Swift Language Guide
答案 1 :(得分:0)
This is the fixed version of the code with the changes that @vadian made. It now works This is the map function that I wrote
This is a screen shot of the operational program from the iPad thanks to @vadian's help
答案是编写此代码
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
就我所能描述的就是答案。有更好的方法来解释它,这就是我能说的最好的。