2016-03-20 11 views
0

JSONの解析から作成されたカスタムオブジェクトのリストを返す関数を作成しようとしています。私はAlamoFireを使用してコンテンツをダウンロードしています。私は成功すると、返される配列の配列を作成するこの関数を書いています。ただし、リターンは常にゼロです。私のコードは以下の通りです:Alamofireネットワークフェッチの完了ハンドラ

func fetchLocations() -> [Location]? { 
    var locations : [Location]? 
    Alamofire.request(.GET, myURL) 
     .responseJSON { response in 
      switch response.result { 
      case .Success(let data): 
       locations = createMapLocations(data) 
      case .Failure(let error): 
       print("Request failed with error: \(error)") 
      } 
     } 
    return locations 
} 

私は、問題は、ネットワーク要求が完了する前に機能が戻っているということですかなり肯定的です。私はSwiftには新しく、これをどう対処するのか不明です。どんな助けもありがとう!

答えて

1

クロージャ/完了ハンドラhttps://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.htmlまたはgoogleについて詳しく読むことができます。

func fetchLocations(completionHandler: (locations: [Location]?, error: NSError) ->()) ->() { 
    var locations : [Location]? 
    Alamofire.request(.GET, myURL) 
     .responseJSON { response in 
      switch response.result { 
      case .Success(let data): 
       locations = createMapLocations(data) 
       completionHandler(locations, error: nil) 
      case .Failure(let error): 
       print("Request failed with error: \(error)") 
       completionHandler(locations: nil, error: error) 
      } 
    } 
} 

使用

fetchLocations(){ 
     data in 
     if(data.locations != nil){ 
      //do something witht he data 
     }else{ 
      //Handle error here 
      print(data.error) 
     } 

    } 
+0

私はあなたの答えを感謝しています。 if(locations!= nil)でnilをチェックするか、if-letを使用する方が良いでしょうか? –

+0

私は個人的にはnilをチェックしますが、if-letも動作します。エラーパラメータを含めるように答えを更新しました。 – kye