如何转换 JSON 以在 Swift 中使用 CLLocationCoordinate2D

How can I convert JSON to work with CLLocationCoordinate2D in Swift

我使用了 Web 服务并将 JSON 数据保存到我的 jsonArray 中。现在我正在尝试将数据应用到 CLLocationCoordinate2D 中,如下所示:

CLLocationCoordinate2D(latitude: self.jsonArray["JSONResults"][0]["lat"],longitude: self.jsonArray["JSONResults"][0]["long"])

Swift 编译器告诉我:

Cannot invoke initializer for type 'CLLocationCoordinate2D' with an argument list of type (latitude: JSON, longitude: JSON)

我试过使用 as Int,但还是不行。我怎样才能正确地转换它?

我的 JSON 数据示例:

{
"long" : "121.513358",
"tel" : "(02)2331-6960",
"lat" : "25.044976",
"add" : "xxx",
"region" : "yyy",
"name" : "zzz"
}

您似乎正在使用库 SwiftyJSON 来解码您的 JSON。

此库创建 JSON 类型的对象,您必须在使用它之前提取它们的值。

由于您在响应中的值似乎是 Strings 而您需要 Doubles 来表示 CLLocationCoordinate2D,这应该有效:

let lat = self.jsonArray["JSONResults"][0]["lat"].stringValue
let long = self.jsonArray["JSONResults"][0]["long"].stringValue
CLLocationCoordinate2D(latitude: Double(lat)!, longitude: Double(long)!)

在此示例中,我使用了 SwiftyJSON 非可选吸气剂 stringValue。但是你也可以使用可选的 getters .string 如果值可以是 nil:

if let lat = self.jsonArray["JSONResults"][0]["lat"].string, let long = self.jsonArray["JSONResults"][0]["long"].string, let latitude = Double(lat), let longitude = Double(long) {
    CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
}