我使用了一个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)
答案 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)
}