【问题标题】:How can I save the value returned for an CompletionHandler?如何保存 CompletionHandler 返回的值?
【发布时间】:2016-10-30 22:44:02
【问题描述】:

我有下一个函数,它使用完成处理程序发出 http 请求并接收 json 响应:

func makeRequest3(request: URLRequest, completion: @escaping (JSON!)->Void){
    let task = URLSession.shared.dataTask(with: request){ data, response, error in
        //Code

        print(data as NSData)
        let json = JSON(data: data)

        completion(json)

    }
    task.resume()
}

我需要调用此函数,并找到“id_token”字段以将其保存在变量中。我是初学者,我正在尝试这段代码,但我有错误“类型'()'没有下标成员”

    var response2 =  makeRequest3(request: request) {response in //<-`response` is inferred as `String`, with the code above.
        return(response)
    }

    var idtoken = response2["id_token"]

我该怎么做?我正在使用 swift3。

【问题讨论】:

  • 您不能使用return,因为请求将异步完成。您需要使用 inside 闭包中的令牌来完成您的工作。

标签: swift3 completionhandler


【解决方案1】:

您的makeRequest3 本身不返回值,而是将响应传递给完成处理程序,在完成处理程序中完成响应所需的所有事情

makeRequest3(request: request) {response in //<-`response` is inferred as `JSON`, with your `makeRequest3`.
    var idtoken = response["id_token"]
    //Use `idtoken` inside this closure
    //...
}

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多