如何将异步函数的结果返回到Swift中的其他类

时间:2019-06-08 06:55:55

标签: swift xcode asynchronous

我正在通过在Swift中抓取来获取一些数据,但是在我的项目的类之间传递数据时遇到了麻烦。

现在这些函数可以成功获取数据并将其打印到控制台,但是我无法将数据返回到ViewController类。

这是ViewController

    @IBAction func tester(sender: UIButton) {       
        var xx = "DON'T PRINT THIS"

        xx = grabTheDeetz()

        print(xx)
    }

,这里是grabTheDeetz()。我希望将数据返回给ViewController。

    print("starting")
    var x = ""
    rip(onSuccess: {
        data in
        print(data)
    })
    return x
//////////////////////////////
        let task = URLSession.shared.dataTask(with: request) {(data, response, error) in

            guard let data = data else {
                print("data was nil")
                return
            }

            guard let htmlString = String(data: data, encoding: .shiftJIS) else {
                print("couldn't cast data into String")
                return
            }

            //print(htmlString)
            success(htmlString)

        }

        task.resume()

我知道数据已被成功检索,我只是想将其返回到可以正确处理的正确位置。

在ViewController中运行后的函数,然后才能返回数据。 (在这种情况下,将始终按按钮“不要打印此内容”,而print(htmlString)将打印正确的数据。)

1 个答案:

答案 0 :(得分:0)

您可以创建这样的回调函数,并将该函数的响应返回给任何其他控制器。

private func process(using request:URLRequest, closure:@escaping (Error?, Any?) -> ()) {
    let urlSessionTask = URLSession.shared.dataTask(with:request, completionHandler: { (data, response, error) in
        var responseData:Any?
        var errorResponse:Error?

        closure(errorResponse, responseData)
    })
    urlSessionTask.resume()
}