gpt4 book ai didi

swift - Void 函数中的意外非 Void 返回值(Swift 2.0)

转载 作者:IT王子 更新时间:2023-10-29 05:01:58 26 4
gpt4 key购买 nike

我一直在浏览 StackOverflow 问题,试图找出我的代码哪里出了问题,但我似乎做不到!我正在尝试将我的 Swift 1.2 项目转换为 Swift 2.0,但我的类在下载 JSON 数据时遇到问题。

我不断收到错误消息unexpected non-void return value in void function

这是我正在使用的代码,有些截断;

...

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!, 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()
}

然后在调用您的函数之前,您应该注册监听名称为“minionsFetched”的NSNotification。只有在您收到该通知后,您才应该像处理这些 minions 一样处理它们。

关于swift - Void 函数中的意外非 Void 返回值(Swift 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com