在 [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 时出错

Swift 中的 CLLocation 管理器获取用户的位置

CLLocation 类 Swift