如何在Swift返回时使用completionHandler关闭?

如何在Swift返回时使用completionHandler关闭?,第1张

概述我正在尝试给我们一个返回一些json数据的RESTful API。我想封装创建HTTP请求的代码,并使用自己的方法设置头,所以我可以通过输入一个url String来调用它,然后让该方法返回一个JSON对象。 在下面的代码片段中,我已经创建了请求对象并设置了头文件,并调用该变量“req”。我没有声明任何名为data,response或者error的对象。我有以下代码正确打印出一个JSON对象 le 我正在尝试给我们一个返回一些Json数据的RESTful API。我想封装创建http请求的代码,并使用自己的方法设置头,所以我可以通过输入一个url String来调用它,然后让该方法返回一个JsON对象。

在下面的代码片段中,我已经创建了请求对象并设置了头文件,并调用该变量“req”。我没有声明任何名为data,response或者error的对象。我有以下代码正确打印出一个JsON对象

let sesh = NSURLSession.sharedSession()    let dataTask = sesh.dataTaskWithRequest(req,completionHandler: {(data,response,error) in        var JsonError : NSError?        let JsonBlob = NSJsONSerialization.JsONObjectWithData(data,options: NSJsONReadingOptions.MutableLeaves,error: &JsonError)        println(JsonBlob)        });    dataTask.resume()

所以这是我的问题。我如何做到这一点,使得这个完整的HANDLE块能够返回JsonBlob,它的类型是“AnyObject!”?如果我稍微修改代码如下:

let sesh = NSURLSession.sharedSession()    let dataTask = sesh.dataTaskWithRequest(req,error) -> AnyObject! in        var JsonError : NSError?        let JsonBlob : AnyObject! = NSJsONSerialization.JsONObjectWithData(data,error: &JsonError)        return JsonBlob        });    dataTask.resume()

那么该程序将不会作为对dataTaskWithRequest的调用进行编译:completionHandler给出一个编译器警告:

Could not find an overload for 'dataTaskWithRequest' that accepts the supplIEd arguments

我不明白这个我正在使用正确的语法来返回关闭,如Swift文档的此页面中给出的:

https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

func getSomething(callback: (Array<AnyObject>) -> ()) {    var dataTask = NSURLSessionDataTask()    dataTask = session.dataTaskWithRequest(request) { (data,error) in        if (error == nil) {            var callbackArray = Array<MyObject>()            let responseDict = NSJsONSerialization.JsONObjectWithData(data,options: .MutableContainers,error: nil) as NSDictionary            let response = responseDict.objectForKey("response_key") as NSDictionary            let array = response.objectForKey("array_key") as NSArray            for item: AnyObject in array {                var arrayItem = MyObject(dict: item as NSDictionary)                callbackArray.append(arrayItem)            }            callback(callbackArray)        } else {            // handle an error        }    }    dataTask.resume()}

那么你可以做一些事情:

getSomething() { (response) in    if let responseArray = response as? Array<MyObject> {        self.somethings = responseArray    }}
总结

以上是内存溢出为你收集整理的如何在Swift返回时使用completionHandler关闭?全部内容,希望文章能够帮你解决如何在Swift返回时使用completionHandler关闭?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1054672.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存