无效函数中的非空值返回值(Swift 2.0)
发布时间:2020-12-14 05:58:08 所属栏目:百科 来源:网络整理
导读:我一直在扫描StackOverflow的问题,试图找出我的代码错误的地方,但是我似乎不能!我正在将Swift 1.2项目转换为Swift 2.0,并且在我的类中出现了一个下载JSON数据的问题。 我在void函数中不断收到错误意外的非空返回值。 这是我正在使用的代码,有点被截断 .
我一直在扫描StackOverflow的问题,试图找出我的代码错误的地方,但是我似乎不能!我正在将Swift 1.2项目转换为Swift 2.0,并且在我的类中出现了一个下载JSON数据的问题。
我在void函数中不断收到错误意外的非空返回值。 这是我正在使用的代码,有点被截断 ... class func fetchMinionData() -> [Minion] { 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)) } return minions //THIS IS WHERE THE ERROR OCCURS }).resume() } ... 也许我忽略了一些简单的东西,但我不确定为什么我的功能将被视为无效。任何想法将非常感谢!谢谢!
你有一个问题,因为你的行:
return minions 不返回你的功能。而是从dataTaskWithRequest中的完成处理程序返回。并且它不应该这样做,因为该闭包是一个void函数。 由于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!,minionDictionary) in minionJSON { minions.append(Minion(minionDetails: minionDictionary)) } self.minions = minions //THIS IS WHERE THE ERROR OCCURS }).resume() } 然后在调用您的函数之前,您应该注册以“minionsFetched”的名义收听NSNotification。只有在你收到通知后,你应该处理这些奴才,就好像被抓取一样。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |