2017-02-16 27 views
1

我想知道如何解析,從Alamofire中的API獲取所有數據。解析Alamofire 4.0和Swfit 3的字典數組

這裏是從API下載一個數據字典的代碼。我怎樣才能從中下載其他東西?

下面是截圖來自JSONFormatter:

http://imgur.com/a/rhxBO

func downloadJsonData (completed: @escaping DownloadCompleted) { 
    Alamofire.request(url, method: .get).responseJSON { response in 
     let result = response.result.value 
     if let dict = result as? [Dictionary<String,AnyObject>] { 

      if let id = dict[0]["id"] as? String { 
       self._id = id 
       print("@@@\(self._id)") 
      } 

      if let name = dict[0]["name"] as? String { 
       self._name = name 
       print("@@@\(self._name)") 
      } 

      if let avatar = dict[0]["avatar"] as? String { 
       self._avatar = avatar 
       print("@@@\(self._avatar)") 
      } 

      if let lat = dict[0]["lat"] as? Float { 
       self._lat = lat 
       print("@@@\(self._lat)") 
      } 

      if let lng = dict[0]["lng"] as? Float { 
       self._lng = lng 
       print("@@@\(self._lng)") 
      } 
     } 
    } 
    completed() 
} 

回答

3
func downloadJsonData (completed: @escaping DownloadCompleted) { 
    Alamofire.request(url, method: .get).responseJSON { response in 
     if let collectionData = response.result.value as? [[String:AnyObject]] { 
      let collection : [YourStruct] = collectionData.flatMap { data in 
       guard let id = data["id"] as? String, 
        let name = data["name"] as? String, 
        let avatar = data["avatar"] as? String, 
        let lat = data["lat"] as? Float, 
        let lng = data["lng"] as? Float 
       else { 
        return nil 
       } 

       return YourStruct(id:id, name:name, avatar:avatar, lat:lat, lng:lng) 
      } 
     } 
    } 
    completed() 
} 

現在你有你的對象的集合。隨着它你可以做你想做的

+0

我很好無法返回Struct。它顯示我的代碼的第四行上的錯誤,它說:「無法推斷當前上下文中的閉包類型」 – Magnifique

+0

@Tonamini看看我更正的答案 –

+0

嗯......它幾乎是完美的,但它在整個數組10次​​..當我打印出collectionData時,它顯示了大量的字典。不知道如何解決這個問題:O – Magnifique

1

我使用Alamofire這樣的:

let Header   = [ "Authorization" : Token ] 
let Parameters  = [:] 
var json : JSON  = nil 
Alamofire.request(URLString, method: method, parameters: Parameters, headers : Header) 
    .responseJSON { response in 
     switch response.result { 
     case .success(let data): 
      json = JSON(data) 
      print(json) 
     case .failure(let error): 
      print("Request failed with error: \(error)") 
     } 
} 
} 

所以,你可以分析你的JSON像這樣的例子:

if json != nil { 
let name  = json["name"].stringValue 
let avatar  = json["avatar"].stringValue 
let lng  = json["lng"].doubleValue 
let lat  = json["lat"].doubleValue 
} 

希望我幫助你,和平