【发布时间】:2014-06-17 18:18:52
【问题描述】:
我在github 上找到了一些用 Swift 编写的代码,
对这条线有点困惑
var done: (NSError?, NSData, NSString?) -> () = { (_, _, _) -> () in }
你能解释一下这行的真正含义吗?非常感谢!
【问题讨论】:
-
in的行指定了闭包的签名。它允许您命名输入参数并指定输出返回类型
标签: swift
我在github 上找到了一些用 Swift 编写的代码,
对这条线有点困惑
var done: (NSError?, NSData, NSString?) -> () = { (_, _, _) -> () in }
你能解释一下这行的真正含义吗?非常感谢!
【问题讨论】:
in 的行指定了闭包的签名。它允许您命名输入参数并指定输出返回类型
标签: swift
_ 表示不要命名那个东西。它可以在许多地方使用。在您的情况下,它是说忽略传递给闭包的变量。您提供的代码忽略了所有参数,但您也可以忽略一些参数。
in 是执行闭包的开始。在您的示例代码中,闭包的实现是空的。
总的来说,该行定义了一个名为“done”的闭包,它接受一个可选的 NSError (NSError?)、NSData (NSData) 和可选的 NSString (NSString?) 并且不返回任何内容 (-> ())。闭包的实际实现什么都不做。
【讨论】:
done 属性的默认值提供的,并且此@987654328 的用户@class 应该提供一个实际做某事的闭包。在该闭包中,您将为参数提供本地名称,而不是使用 _(如该要点中当前的第 55 行所示)。
self 作为委托传递。
_ 是占位符参数名称。它表示需要一个参数,但不会使用。 in 表示闭包类型签名的结束。这一整行定义了一个函数,它接受三个参数并且什么都不做。
【讨论】:
“_”用来使某些东西匿名。
for (key, _) in dictionary{}
在这里,我们以匿名的方式创造价值。
In 用于启动闭包或循环,以及我们指定应用循环的集合。
【讨论】: