在 [CLLocation] SWIFT 中保存 JSON 结果
Posted
技术标签:
【中文标题】在 [CLLocation] SWIFT 中保存 JSON 结果【英文标题】:Save JSON results in [CLLocation] SWIFT 【发布时间】:2017-11-11 12:51:03 【问题描述】:我的代码会获取特定位置附近的地点。我设法获得了附近所有位置的坐标,json 看起来像这样:
更新的 JSON
这就是json结构的样子
"results" : [
"id" : "6a70e8bec1fd7429c3107bb53ff0663b68750b7d",
"rating" : 4.2999999999999998,
"vicinity" : "6169 طريق الأمير تركي بن عبدالعزيز الأول، الرياض",
"scope" : "GOOGLE",
"geometry" :
"viewport" :
"northeast" :
"lat" : 24.725911030291499,
"lng" : 46.646357630291497
,
"southwest" :
"lat" : 24.723213069708489,
"lng" : 46.643659669708498
,
"location" :
"lat" : 24.7244879,
"lng" : 46.645116399999999
,
"icon" : "https:\/\/maps.gstatic.com\/mapfiles\/place_api\/icons\/restaurant-71.png",
"place_id" : "ChIJebIILG8dLz4Rwh96XLe4lDk",
"opening_hours" :
"weekday_text" : [
],
"open_now" : true
,
"photos" : [
"width" : 960,
"height" : 1280,
"html_attributions" : [
"<a href=\"https:\/\/maps.google.com\/maps\/contrib\/111982605117618652897\/photos\">*خارج الخدمه* *مؤقتا*<\/a>"
],
"photo_reference" : "CmRaAAAAkcQXErGTRgMEXeTRjXyqdJxiOD9Bq3ApLu9MfiWXjd1gGaJ7LRmSm19mJdXuT8q-KD3Pg0XuK4rAAA_-JwQl8iAo-y3jx8oQ4Zn3hBRJkHBgzXxvIyQrs3Nd-JKinQdgEhCYkgEXcPpPtT0Z7tc1_FOxGhSQFuKsRZFDeRW5AUy9VLAR3MdRUA"
],
"reference" : "CmRRAAAAYXlBsUXQooQOBk0EWmHmoRFbX4cCqm7bYUm0U2ODQYwqv8fXNCgxbFFuZp2m8NHT-La7Zdk6WDY0eGdJqBIyT08sqyY-b4vZFjHZY32CQXYdaKtjT54YDeXglWRRKcAdEhD0imBkJB_luly2EbQNFA47GhSUrev3SNxuTvSRCARzjOZ6zwt3bw",
"name" : "Hamburgini هامبرغيني",
"types" : [
"restaurant",
"food",
"point_of_interest",
"establishment"
]
,
如何将结果保存在
var coordinate: [CLLocation] = [CLLocation]()
所以最终我可以选择离另一个坐标最近的地方吗?
我的代码:
Alamofire.request(urlStr).responseJSON
response in
if let value: AnyObject = response.result.value as AnyObject?
//Handle the results as JSON
let data = JSON(value)
for (key,subJson):(String, JSON) in data["results"]
let array = subJson["geometry"]["location"]
【问题讨论】:
【参考方案1】:如果我理解你可以试试这个,但根据你的需要,我建议创建你的模型并用你的 JSON 数据初始化它。
for (_, jsonDict): (String, JSON) in data["results"]
guard let location = jsonDict[“geometry”][“location”] as? [String: Any] else return
if let latitude = location[“lat”] as? Double, let longitude = location[“lng”] as? Double
let locationCoord = CLLocation(latitude: latitude, longitude: longitude)
coordinate.append(locationCoord)
【讨论】:
Value of tuple type '(key: String, value: JSON)' has no member 'subscript'
旁边 coord[“lat”]
我认为 json 响应是字典而不是数组
@leo0019 我认为您的变量数组包含所有带有坐标的字典。我将编辑我的答案。
看我的回答!!不知何故这对我有用,但我仍然认为发生了一些奇怪的事情
@leo0019 这取决于你的 Json 结构,没有看到更多我无法帮助你:/
请再次检查我的问题【参考方案2】:
let array = subJson["geometry"]["location"].dictionaryValue
for (key,subJson):(String, JSON) in array
// Do something you want
let latitude = array["lat"]?.doubleValue
let longitude = array["lng"]?.doubleValue
let location = CLLocation(latitude: latitude!, longitude: longitude!)
self.coordinate.append(location)
【讨论】:
以上是关于在 [CLLocation] SWIFT 中保存 JSON 结果的主要内容,如果未能解决你的问题,请参考以下文章
如果 Swift 中存在 NSUserDefault,则尝试更新 CLLocation
在 Swift 中将 CLLocation 转换为 MKMapItem
在 Swift 中编码 CLLocation 数组会使编译器崩溃?
在 Swift 中将 CLLocationCoordinate2D 转换为 CLLocation 时出错