gpt4 book ai didi

swift - 完成 block 内方法的返回对象

转载 作者:搜寻专家 更新时间:2023-11-01 06:47:56 25 4
gpt4 key购买 nike

我想创建一个带有 URL 参数的方法,该方法返回调用该 URL 的响应。如何返回方法的完成 block 内获得的数据?

class func MakeGetRequest(urlString: String) -> (data: NSData, error: NSError)
{
let url = NSURL(string: urlString)
var dataResponse: NSData
var err: NSError

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
//How can I return the data obtained here....
})

task.resume()
}

最佳答案

如果您希望MakeGetRequest 方法返回通过dataTaskWithURL 获取的数据,则不能。该方法执行异步调用,很可能在 MakeGetRequest 已经返回后完成 - 但更一般而言,它无法以确定性方式获知。

通常异步操作是通过闭包处理的——而不是你的方法返回数据,你传递一个闭包给它,接受在你的代码版本中返回的参数——来自 dataTaskWithURL 完成时调用的闭包,您调用该完成处理程序闭包,提供适当的参数:

class func MakeGetRequest(urlString: String, completionHandler: (data: NSData, error: NSError) -> Void) -> Void
{
let url = NSURL(string: urlString)
var dataResponse: NSData
var err: NSError

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
completionHandler(data: data, error: error)
})

task.resume()
}

Swift 5 更新:

class func makeGetRequest(urlString: String, completionHandler: @escaping (Data?, Error?) -> Void) -> Void {
let url = URL(string: urlString)!
var dataResponse: Data
var err: NSError

let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, respone, error) -> Void in
completionHandler(data, error)
})

task.resume()
}

关于swift - 完成 block 内方法的返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27953739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com