在Swift中,让NAME1=NAME2(params){var1,var2是什么意思?

在Swift中,让NAME1=NAME2(params){var1,var2是什么意思?,swift,Swift,我不熟悉Swift,有些结构我甚至看不懂。例如: let task = URLSession.shared.dataTask(with: request) { data, response, error in 是什么?函数调用是因为?还是内联匿名类声明是因为{}或枚举,因为在中,它是尾随闭包语法。URLSession.dataTaskwith:返回URLSessionDataTask实例,其最后一个输入参数是Data?类型的闭包,URLResponse?,Error?->Void,其中返回异步

我不熟悉Swift,有些结构我甚至看不懂。例如:

let task = URLSession.shared.dataTask(with: request) { data, response, error in

是什么?函数调用是因为?还是内联匿名类声明是因为{}或枚举,因为在

中,它是尾随闭包语法。URLSession.dataTaskwith:返回URLSessionDataTask实例,其最后一个输入参数是Data?类型的闭包,URLResponse?,Error?->Void,其中返回异步网络请求响应或错误

您可以使用URLSessionDataTask对象调用start或取消网络请求

如果不使用尾随闭包语法,可能会更清楚地看到:

let task = URLSession.shared.dataTask(with: request, completionHandler: { data, response, error in
    // you can use data, response and error inside the closure here
})
这相当于:

let task = URLSession.shared.dataTask(with: request) { data, response, error in

尾随闭包语法只允许在最后一个输入参数为闭包时省略输入参数标签,并将带有花括号的闭包放在函数调用的右括号之后。

在Swift中,这称为完成处理程序。它基本上是一个匿名函数,您传入该函数时在Swift中,这可以作为普通参数或函数调用后的闭包写入,这就是您的示例中发生的情况

您可以在函数定义中从

函数request和completionHandler有两个参数

在Swift中,当最后一个参数是一个函数时,它可以并且经常在函数调用后作为闭包写入

注:
正如在另一条评论中所建议的,这不是返回值。您将看到此函数的返回值为URLSessionDataTask,它在您的示例中被分配给task

您应该阅读Swift编程语言SPL,否则您将遇到困难。虽然很多内容与C类似,但它是回答此常量的最终位置UCT?问题这里有很多不错的答案,但这里有另一个快速提示:将最后一部分想象为func handlerdata:Data?、response:URLResponse?、error:error?{…}的匿名内联版本对象调用开始或取消网络请求。您的意思是恢复或取消以及state@LeoDabus尽管这个函数实际上被称为resume,但它会启动请求,所以我的意思是start,而不是resume。
func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask