2016-03-20 14 views
0

JSON'u ayrıştırmaktan oluşturulan özel nesnelerin listesini döndürecek bir işlev oluşturmaya çalışıyorum. İçeriği indirmek için AlamoFire kullanıyorum. Başarılı bir şekilde, iade edilecek bir dizi yer yaratan bu işlevi yazdım. Ancak, geri dönüşler her zaman sıfırdır. Benim kod aşağıda:Alamofire ağı getirme için tamamlayıcı işleyici

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 
} 

Sorunun ağı istek tamamlanmadan önce işleyen dönen olmasıdır oldukça olumlu. Swift’e yeniyim ve bunun nasıl ele alınacağından emin değilim. Herhangi bir yardım takdir edilecektir!

cevap

1

Kapatma/tamamlama işleyicileri https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html veya google hakkında daha fazla bilgi edinebilirsiniz.

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) 
      } 
    } 
} 

Kullanımı

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

    } 
+0

Cevabını teşekkür ederiz. Eğer (location! = Nil) ile nil'i kontrol etmek veya if-let'i kullanmak daha mı iyidir? –

+0

Şahsen nil'i kontrol edecektim ama bir "if-let" de işe yarayacaktı. Cevabımı bir hata parametresi içerecek şekilde güncelledim. – kye