如何在Swift中将JSON转换为与CLLocationCoordinate2D一起使用

时间:2015-09-29 15:25:08

标签: json swift cllocationcoordinate2d

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

var resultList = from c in context.Category
    join q in context.Question on c.CategoryId equals q.CategoryId
    join a in context.Answer on q.QuestionId equals a.QuestionId into QuestAnsw
    from a2 in QuestAnsw.DefaultIfEmpty()
    where q.CustomerId == customerId 
    orderby 
        (searchWords.Any(w => a2.Text.Contains(w))
        || searchWords.Any(w => c.Text.Contains(w))
        || searchWords.Any(w => q.Text.Contains(w))) 
    descending,
    a.Id ascending //<---additional sort expression
    select new { Category = c, Question = q };

Swift编译器告诉我:

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

我尝试使用Int作为但它仍然无法正常工作。我怎样才能恰当地正确转换?

我的JSON数据示例:

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

1 个答案:

答案 0 :(得分:1)

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

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

由于您的回复中的值似乎为String,并且Double需要CLLocationCoordinate2D s,因此这应该有效:

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

在此示例中,我使用了SwiftyJSON非可选getter stringValue。但如果值可能为nil,您也可以使用可选的getters .string

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)
}