2016-11-20 18 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

が再び更新更新してくださいどのように:(、ご確認ください。 1つの関数だけが表示され、completionHandlerを持つgetCurrency –