2016-03-20 2 views
0

Я пытаюсь создать функцию, которая вернет список пользовательских объектов, созданных при разборе JSON. Я использую AlamoFire для загрузки контента. Я написал эту функцию, которая при успехе создает массив возвращаемых местоположений. Однако возврат всегда равен нулю. Мой код ниже:Обработчик завершения для сети Alamofire fetch

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

Я ценю ваш ответ. Лучше ли проверять нуль, если (location! = Nil) или использовать if-let? –

+0

Я лично проверил бы за ноль, но 'if-let' также будет работать. Я обновил свой ответ, включив параметр ошибки. – kye