2017-01-06 34 views
0

我在返回的json数据上遇到了flatMap的困难。我如何在下面的代码中实现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

有两件事情,在let actors = ...之前缺少'if'。在它的真实情况下,你不能从异步闭包中返回任何东西。 – OOPer

+0

我刚加了'if',现在出现错误:''flatMap'产生'[SegmentOfResult.Iterator.Element]',而不是预期的上下文结果类型'Void'(aka'()') – Luke

+0

当我写道,你不能“返还”任何东西。删除'return'并将'actors.flatMap(Actor.init)'的结果赋值给用作TableView的dataSource的东西。 – OOPer

回答

0

我只是将它改为var actorsArray: [Actor] = []并更改了self.actorsArray = actors.flatMap(Job.init)我工作了!非常感谢@OOPer !!!

+1

什么是作业?这不是你在这里包括的类型... – Rob

相关问题