返回值时,void函数中出现意外的非void返回值

时间:2016-01-06 06:57:08

标签: ios iphone swift swift2

我必须从getResonse(url)调用web服务,然后我想返回json。我无法如何在完整的处理程序中返回json。他们给我错误在void函数中出现意外的非void返回值请帮助。任何帮助都会得到帮助。在此先感谢

    func GetStation(url : String) {
        var dict = NSDictionary()
    dict = getResonse(url)
    }

        func getResonse(myUrl:NSString) ->NSDictionary
        {
            let request = NSMutableURLRequest(URL: NSURL(string: myUrl as String)!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 30)
            let session = NSURLSession.sharedSession()
            request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
            request.HTTPMethod = "GET"
            let task = session.dataTaskWithRequest(request) { data, response, error in
                guard data != nil else{
                    return
                }
                do {
                    if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
                        print(json)
                        if (data  == nil)
                        {
                           return nil
error
                        }
                        else
                        {
                            return json

error
                        }
                    }else  {
                        let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)    // No error thrown, but not NSDictionary
                        print("Error could not parse JSON: \(jsonStr)")
                    }
                } catch let parseError {
                    print(parseError)                                                          // Log the error thrown by `JSONObjectWithData`
                    let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
                    print("Error could not parse JSON: '\(jsonStr)'")
                }
            }

            task.resume()
        }

2 个答案:

答案 0 :(得分:1)

这只是一个编码错误(可能是因为括号遍布整个地方)。

在你的完成处理程序中,你有3个强制退出,其中两个返回一个值,另一个不返回。

来自“警卫数据......” - >别的{return}

在do {... return nil ...或return json ...}

从错误消息中我收集到后两次返回不正确。

答案 1 :(得分:0)

你在NSUrlSession的dataTaskWithRequest:里面,它返回

func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

它返回块内的Void。所以它显示错误。