2016-11-20 104 views
0

我不明白爲什麼我得到一個空字典[:]? 我覺得我做的所有的權利swift alamofire json parse

func getCurrency() -> [String: AnyObject] { 
    var dict = [String: AnyObject]() 
    Alamofire.request("http://api.fixer.io/latest?base=USD",encoding: JSONEncoding.default).responseJSON { 
     response in 
     if let status = response.response?.statusCode { 
      switch(status){ 
      case 200: 
       let json = response.result.value as? [String: AnyObject] 
       let rates = json!["rates"] as? [String:AnyObject] 
       for i in rates! { 
        dict[i.key] = i.value 
       } 
      default: 
       print("error with response status: \(status)") 
      } 
     } 
    } 
    return dict 
} 

回答

3

我想你的意思是問「爲什麼你得到一個空的字典」。

這是因爲你的函數getCurrency返回字典之前請求返回響應

Alamofire通過completionHandler異步模式返回數據,所以你也必須這樣做。你不能立即返回值,而是你想使用Void返回類型,而是使用完成處理程序閉包模式。

是這樣的:

func getCurrentcy(completionHandler: @escaping (NSDictionary?, NSError?) ->()) { 


    Alamofire.request("http://api.fixer.io/latest?base=USD",encoding: JSONEncoding.default) 
     .responseJSON { response in 
      switch response.result { 
      case .success(let value): 
       completionHandler(value as? NSDictionary, nil) 
      case .failure(let error): 
       completionHandler(nil, error as NSError?) 
      } 
    } 
} 

然後

getCurrentcy { (responseObject:NSDictionary?, error:NSError?) in 
     print("responseObject = \(responseObject); error = \(error)") 
    } 
+0

哦RLY :(我怎麼可以這樣做,它的工作 – DmitrievichR

+0

我更新我的回答,請刷新 –

+0

再次更新,請檢查,?只有一個你現在會看到的函數,getCurrency和completionHandler –