簡體   English   中英

Alamofire的CompletionHandler

[英]CompletionHandler for Alamofire

我正在嘗試返回responseJSON

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”中,將無法正常工作:

var res: Any = ""
PersonResource.getAllPersons{ (result) in
    res = result
}
print(res)

最好的祝福

response.result.value是可選的,因此請嘗試返回Any?。 但這是更好的方法:

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)
        }
    }
}
var res: Any = ""
PersonResource.getAllPersons{ (result) in
    res = result
    print(res)
}

將print語句放入其中將打印結果

為什么呢

PersonResource.getAllPersons是一個異步調用,因此即使在PersonResource.getAllPersons的完成塊執行並設置res之前,也要執行print(res)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM