Swift 从方法内部获取变量

Swift 从方法内部获取变量,swift,api,Swift,Api,我是swift的新手,正在学习从API发出HTTP请求 现在我有了这个结构 struct CNJokesProvider { let url = URL(string: "https://api.chucknorris.io/jokes/random")! func getRandomJoke() -> String { var request = URLRequest(url: url) request.httpMethod = "G

我是swift的新手,正在学习从API发出HTTP请求

现在我有了这个结构

struct CNJokesProvider  {
    let url = URL(string: "https://api.chucknorris.io/jokes/random")!

    func getRandomJoke() -> String {
        var request = URLRequest(url: url)

        request.httpMethod = "GET"

        let session = URLSession.shared

        let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
            do {
                let json = try JSONDecoder().decode(CNJokesResponse.self, from: data!)
            } catch {
                print("\(error)")
            }
        })

        task.resume()

        //return json.value
    }
}
您可以看到json常量的声明。 我需要从常量中获取数据,然后从这个getRandom笑话函数返回它。
我试图使它成为一个struct属性,但我无法使它工作。

您在
任务中声明json属性,因此这意味着您无法在那里的
do catch
语句之外访问它

这不是真正的原因。真正的原因是
URLSession.dataTask
是异步的。