无效函数中的非空值返回值(Swift 2.0)

我一直在扫描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。只有在你收到通知后,你应该处理这些奴才,就好像被抓取一样。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...