下面的代码片段从official document中复制,用于演示如何使用扩展来将方法添加到现有类型。
extension Int {
func repetitions(task: () -> Void) {
for _ in 0..<self {
task()//what's going on here?
}
}
}
3.repetitions { //why I don't have to call as `repetitions()`
print("Hello!")
}
问题:问题不是问灭绝是如何扩展的。我只是对这段代码有点困惑,为什么看起来是这样?为什么在功能体内部使用
task()
?它是从哪里来的?对于3.repetition
行,为什么不写为3.repetition()
谢谢
最佳答案
repetitions
是一个函数,它接受一个函数作为参数并多次调用该函数。
要调用repetitions
,我们可以说(注意,这是Swift 3):
func sayHi() {
print("Hello")
}
3.repetitions(task:sayHi)
但为什么要定义一个额外的名称?相反,我们使用匿名函数:
3.repetitions(task:{print("Hello"})
但在这种情况下,我们可以省略对
sayHi
的调用中的括号,并使用尾随语法:3.repetitions{print("Hello")}