首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿拉莫火CompletionHandler

阿拉莫火CompletionHandler
EN

Stack Overflow用户
提问于 2017-03-14 08:27:15
回答 2查看 3K关注 0票数 2

我想把responseJSON还给你

代码语言:javascript
复制
static func getAllPersons(completionhandler:@escaping (Any) -> ()){
    let URL = baseURL + "api/person"
    Alamofire.request(URL).responseJSON {
        response in
        completionhandler(response.result.value as Any)
    }
}

但是,如果我试图将responseJSON存储在"res“中,它将无法工作:

代码语言:javascript
复制
var res: Any = ""
PersonResource.getAllPersons{ (result) in
    res = result
}
print(res)

诚挚的问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-14 08:30:25

代码语言:javascript
复制
var res: Any = ""
PersonResource.getAllPersons{ (result) in
    res = result
    print(res)
}

将print语句放入其中,它将打印结果。

为什么?

PersonResource.getAllPersons是一个异步调用,因此print( res )甚至在PersonResource.getAllPersons的完成块执行和设置res之前就被执行。

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 08:33:24

response.result.value是可选的,所以尝试返回任何?但这是更好的方法:

代码语言:javascript
复制
static func getAllPersons(completionhandler:@escaping ([String: Any]?, Error?) -> ()){
    let URL = baseURL + "api/person"
    Alamofire.request(URL).responseJSON {
        response in
        if let json = response.result.value as? [String: Any] {
                completionhandler(json, nil)
        }
        else if let error = response.result.error as Error? {
                completionHandler(nil, error)
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42781026

复制
相关文章

相似问题

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