您遇到了问题,因为您的线路:
return minions
不从您的函数返回。而是从中的完成处理程序返回
dataTaskWithRequest。它不应该这样做,因为该关闭是一个无效函数。
您遇到的问题
dataTaskWithRequest是由于异步操作引起的。这意味着它可以在执行功能后稍后返回。
因此,您需要更改设计模式。
一种实现方式如下:
static var minions:[Minion] = [] { didSet { NSNotificationCenter.defaultCenter().postNotificationName("minionsFetched", object: nil) }}class func fetchMinionData() { var myURL = "http://myurl/test.json" let dataURL = NSURL(string: myURL) let request = NSURLRequest(URL: dataURL!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0) let session = NSURLSession.sharedSession() session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in let minionJSON = JSON(data!) var minions = [Minion]() for (_, minionDictionary) in minionJSON { minions.append(Minion(minionDetails: minionDictionary)) } self.minions = minions //THIS IS WHERe THE ERROR OCCURS }).resume()}然后,在调用函数之前,您应该注册以
NSNotification名称“ minionsFetched”
进行侦听。而且,只有在收到该通知后,您才应该像处理这些小仆一样处理它们。



