Swift3函数声明中的新"for","at","in"关键字是什么?

Pek*_*ica 4 xcode swift swift3

我正在使用Swift 2编写的Swift初学者教程.

它包含代码(随机示例)

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
Run Code Online (Sandbox Code Playgroud)

Swift 3(我正在使用XCode 8 Beta)已经改变了,IDE有助于将其转换为新的(漂亮的!)符号:

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
Run Code Online (Sandbox Code Playgroud)

让我困惑的是"for segue:"中的"for".我明白为什么它在那里,但它在语法上是什么样的元素?为参数命名for, for seguesegue

它只是装饰 - 一个没有意义的元素,但帮助开发人员理解上下文?它还有什么用吗?这个概念有名字吗?我可以在自己的方法中使用它吗?

我看到"in"和"at"发生了同样的事情.

jrt*_*ton 12

语法允许您将参数标记两次 - 一次用于函数(参数名称),一次用于调用(参数标签).默认情况下,这两个将是相同的(如sender您的示例中所示),但它们在调用站点使函数更具可读性时会有所不同:

prepare(for: aSegue, sender: something)
Run Code Online (Sandbox Code Playgroud)

比以下句子更具可读性:

prepare(segue: aSegue, sender: something)
Run Code Online (Sandbox Code Playgroud)

这听起来像是在准备segue,而不是 segue 做准备.

for 在函数内部使用以引用segue是一个可怕的名称,因此如果需要,您可以使用不同的名称.

我们的想法是在呼叫站点满足有时相互冲突的可读性目标,并在实现中明智地命名.

定义函数时,如果要使用单独的参数标签和参数名称,则首先指定参数标签,然后指定参数名称second:

func sayHello(to name: String) {
    print("Hello " + name)
}

sayHello(to: "Pekka")
Run Code Online (Sandbox Code Playgroud)

to仅在调用函数时具有相关性.name在函数内部使用.