无法将数据传递给viewdidload,Swift

时间:2016-03-16 04:54:28

标签: ios json swift alamofire

我通过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 

}}

2 个答案:

答案 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"]
    }
}}