我提前为这个问题的标题道歉。
我希望在 Swift 中对函数的某些语法元素进行分割。
函数:
let call:NSURLSessionDataTask = session.dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
return
}
println("response = \(response)")
}
我想知道逐行,元素如何影响常量?
我看到的;
1) 一个常量被设置为函数 (session.dataTaskWithR...
) 的结果,带有一个“请求”参数,后跟似乎是闭包函数的开始 {
触发时执行。 (使用 call.resume()
)
2) 这些是函数的声明变量吗?他们被分配到这里了吗?在函数或对象的顶部写入“数据、响应、错误”似乎很奇怪,我假设/知道这些填充了从 session.dataTas..
调用返回的数据。看起来好像它们未声明且未键入。
4) 这看起来很直接,如果错误不为零,打印错误并退出。
9) 打印响应头。
所以,我想我的主要问题是关于第 2 行的。我认为只写变量名没有任何意义,除了它是如何完成的。这就是它的完成方式吗?
最佳答案
你用错了“闭包”这个词。 Swift 中的所有函数都是闭包。这个函数的特别之处在于它是匿名的。这意味着没有声明行——所以需要有另一种方式来表达传入的参数。 Swift 的解决方案是将参数列表(可能还有返回类型)放在函数体开头的 in
行中。
Seems weird to just write "data,response,error" at the top of a function or object, I assume/know these are populated with data returned from the session.dataTas.. call. It just seems as though they are undeclared and not typed.
正确。它们可以明确地类型化,但它们不必在这种情况下,因为类型已经为编译器所知;它已经知道 session.dataTaskWithRequest:
的参数是什么(包括它作为第二个参数的函数的参数类型)。
关于Swift 函数语法分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514847/