我通过alamofire从网络服务器请求了数据。我想将数据传递给viewdidload但是viewdidload中的数据是空的,请帮我解释一下。感谢和sory我的英语。这是我的代码
class LiveScoreViewController: UIViewController
{
var matchData : JSON! = []
func loadLiveScore(section: String){
DNService.getLiveScore(section) { (JSON) -> () in
self.matchData = JSON[ ]
self.matchData = self.matchData["match"]
//print(self.matchData) -> is ok
}
}
override func viewDidLoad() {
super.viewDidLoad()
loadLiveScore("LiveScore")
//print(self.matchData) -> is empty
}}
答案 0 :(得分:3)
如果DNService.getLiveScore
是一个webservice调用,那么你将无法在viewDidLoad中获取matchData,因为webservice调用需要一些时间才能完成,无论你试图用matchData做什么都应该在DNService.getLiveScore
最有可能的完成块
如果需要,可以在loadLiveScore
之后的viewDidLoad
以及完成块中放置一个打印语句,您将看到打印语句的执行顺序与您不同预期
答案 1 :(得分:1)
getLiveScore
是异步方法。因此,您必须使用完成处理程序来获取响应。为loadLiveScore
func loadLiveScore(section: String), handler: (JSON) -> ()) {
DNService.getLiveScore(section) { (JSON) -> () in
handler(JSON)
}
}
从viewDidLoad调用方法,如:
override func viewDidLoad() {
super.viewDidLoad()
loadLiveScore("LiveScore") { json in
print(json) // parse JSON as you need
self.matchData = json["match"]
}
}}