Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法将数据传递给viewdidload、Swift_Ios_Json_Swift_Alamofire - Fatal编程技术网

Ios 无法将数据传递给viewdidload、Swift

Ios 无法将数据传递给viewdidload、Swift,ios,json,swift,alamofire,Ios,Json,Swift,Alamofire,我通过alamofire从Web服务器请求数据。我想将数据传递给viewdidload,但viewdidload中的数据为空,请帮助我解释。谢谢,很抱歉我的英语。这是我的密码 class LiveScoreViewController: UIViewController { var matchData : JSON! = [] func loadLiveScore(section: String){ DNService.getLiveScore(section) { (JSON

我通过alamofire从Web服务器请求数据。我想将数据传递给viewdidload,但viewdidload中的数据为空,请帮助我解释。谢谢,很抱歉我的英语。这是我的密码

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 

}}

如果
DNService.getLiveScore
是一个webservice调用,那么您将无法在viewDidLoad中获取匹配数据,因为webservice调用将需要一些时间才能完成,您试图对匹配数据执行的任何操作都应该在
DNService.getLiveScore
的完成块中完成


如果您愿意,您可以在
viewDidLoad
中的
loadLiveScore
之后以及在completion块中放置一条print语句,您将看到print语句的执行顺序与您所期望的不同如果
DNService。getLiveScore
是一个webservice调用,然后,您将无法在viewDidLoad中获取matchData,因为webservice调用将需要一些时间才能完成,您尝试对matchData执行的任何操作都应该在
DNService.getLiveScore的完成块中完成


如果需要,您可以在
viewDidLoad
中的
loadLiveScore
之后以及在完成块中放置一条print语句,您将看到print语句的执行顺序与您期望的不同

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

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

您的view Dod load print语句将首先调用,然后在一段时间后响应将出现,然后只有self.matchData有其他方式的数据它是空的您的view Dod load print语句将首先调用,然后在一段时间后响应将出现,然后只有self.matchData有其他方式的数据它是空的如果我在外部打印self.matchDataloadLiveScore(“LiveScore”){handled in…}仍然是空的。为什么?因为在下载之前,竞争打印语句被执行,但当您将其放在loadLiveScore方法下,然后在完成下载执行打印语句之后。@shuuichiakai您对异步编程缺乏基本的理解,去看看这里,你就会明白为什么了。如果我在loadLiveScore(“LiveScore”){handled in….}之外打印self.matchData,它仍然是空的。为什么?因为在下载之前,Competite print语句被执行,但当您将它放在loadLiveScore方法下,然后在完成下载后,执行print语句。@shuuichiakai您缺少对异步编程的基本理解,请查看此处,您将了解原因。