首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3:不使用iOS中的完成处理程序

Swift 3:不使用iOS中的完成处理程序
EN

Stack Overflow用户
提问于 2016-10-21 07:10:06
回答 1查看 532关注 0票数 0

我在NSObject类中使用完成处理程序创建了一个函数,用于使用web服务。但是,我没有办法用处理程序返回来调用该函数。

代码语言:javascript
运行
复制
func getUser(url:String, completionHandler: @escaping (NSDictionary?, NSError?) -> ()) {

    let config = URLSessionConfiguration.default // Session Configuration
    let session = URLSession(configuration: config) // Load configuration into Session
    let url = URL(string: url)!

    let task = session.dataTask(with: url, completionHandler: {
        (data, response, error) in

        if error != nil {
           completionHandler(nil, error as NSError?)
        } else {
            do {
                if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [NSDictionary: Any] {
                    completionHandler(json as NSDictionary?,nil)
                }
            } catch {
                print("error in JSONSerialization")
            }
        }
    })
    task.resume()
}
EN

Stack Overflow用户

回答已采纳

发布于 2016-10-21 07:15:37

您应该确保在每种情况下都调用您的completionHandler:例如,当JSONSerialization抛出时,您捕获并打印错误,但您没有调用您的completionHandler。如果JSON结果是nil,则相同

加法

你可以用这样的方式来处理:

代码语言:javascript
运行
复制
do {
    let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [NSDictionary: Any]
    completionHandler(json,nil)
} catch(let error) {
    print(error)
    completionHandler(nil, error)
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40170440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档