Return 完成块中方法的对象
Return object for a method inside completion block
我想创建一个带有 URL 参数的方法,return 是调用 URL 的响应。
我如何 return 在方法的完成块内获取数据?
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
方法return通过dataTaskWithURL
获得的数据,你不能。该方法执行异步调用,最有可能在 MakeGetRequest
已经 returned 之后完成 - 但更一般地说,它无法以确定的方式获知。
通常异步操作是通过闭包处理的 - 而不是你的方法 returning 数据,你传递一个闭包给它,接受在你的代码版本中 returned 的参数- 从 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()
}
我想创建一个带有 URL 参数的方法,return 是调用 URL 的响应。 我如何 return 在方法的完成块内获取数据?
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
方法return通过dataTaskWithURL
获得的数据,你不能。该方法执行异步调用,最有可能在 MakeGetRequest
已经 returned 之后完成 - 但更一般地说,它无法以确定的方式获知。
通常异步操作是通过闭包处理的 - 而不是你的方法 returning 数据,你传递一个闭包给它,接受在你的代码版本中 returned 的参数- 从 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()
}