函数在void函数中给出了意外的非void返回值

时间:2016-09-04 00:08:34

标签: swift

我有一个应该获取json数据并返回它的函数。这是以下功能:

func httpjson(){
    let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) { (data, response, error) -> Void in
        let httpResponse = response as! NSHTTPURLResponse
        let statusCode = httpResponse.statusCode
        if (statusCode == 200) {
            print("All OK!")
            do{
                let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
                return json
            }catch {
                print("Error with Json: \(error)")
            }
        }
    }
    task.resume()
}

代码返回错误Unexpected non-void return value in void function

在阅读了一些关于此问题的内容后,我读到可以通过将func httpjson(){更改为func httpjson()-> String{来修复此问题,但仍会返回相同的错误。

1 个答案:

答案 0 :(得分:0)

问题似乎在于您的闭包定义为(data, response, error) -> Void,而不是httpjson方法。

由于您的数据任务是异步的,因此在JSON解析完成之前已经返回httpjson。它不需要被定义为返回任何东西,因为 还没有返回。

您需要对json(通知,回调,完成功能块等)执行某些操作,以便让应用程序的其余部分知道何时可以使用。