2017-01-06 7 views
0

У меня возникли трудности с flatMap по возвращенным данным json. Как реализовать FlatMap в следующем коде. Я постоянно получаю сообщение об ошибке: Computed property must have an explicit typeJSON и flatMap - ошибка Вычисленное свойство должно иметь явный тип

let task = URLSession.shared.dataTask(with: request) { data, response, error in 

    DispatchQueue.main.async { 

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode == 200 { 

      do { 
       let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: Any] 

       if let actors = json?["response"] as? [[String : Any]] { 
        self.arrayActors = actors.flatMap(Actor.init) 
       } 

       self.tableView.reloadData() 

      } catch { 
       print("catch error") 
      } 


    } //end of if let httpStatus 


}//end dispatch 

}//end of task 

структура 'Актер' находится здесь:

struct Actor { 
    let actorName: String 

} 

extension Actor { 
    init?(JSON: [String : Any]) { 
     guard let actorName = JSON["actorName"] as? String else { 
      return nil 
     } 
     self.actorName = actorName 
    } 
} 

Любая помощь будет принята с благодарностью!

+0

Две вещи, отсутствующие 'if' before' let actors = ... '. И в своем блоке с истинным корпусом вы не можете «возвращать» что-либо из закрытия асинхронизации. – OOPer

+0

Я только что добавил 'if', и теперь я получаю сообщение об ошибке:' 'flatMap' производит '[SegmentOfResult.Iterator.Element]', а не ожидаемый тип контекстуального результата 'Void' (aka '()') ' – Luke

+0

As I написал, вы ничего не можете «вернуть». Удалите 'return' и присвойте результат' actors.flatMap (Actor.init) 'тому, что используется в качестве источника данных TableView. – OOPer

ответ

0

Я только что сменил его на var actorsArray: [Actor] = [] и изменил self.actorsArray = actors.flatMap(Job.init), и я работал !!! Большое спасибо @OOPer !!!

+1

Что такое 'Job'? Это не тот тип, который вы здесь включили ... – Rob