我正在通过在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)将打印正确的数据。)
答案 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()
}