Swift3函数声明中新的“for”、“at”、“in”关键字是什么?

gab6jxml  于 2023-04-19  发布在  Swift
关注(0)|答案(2)|浏览(199)

我正在学习一个Swift的初学者教程,它是用Swift 2编写的。
它包含的代码类似(随机示例)

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {

这在Swift 3中有所改变(我使用的是XCode 8 Beta),IDE将其转换为新的(漂亮的!)符号:

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {

这里让我困惑的是“for segue:“中的“for”。我知道它为什么在那里,但它在语法上是什么类型的元素?参数名是forfor segue还是segue
它仅仅是一个装饰--一个没有任何意义的元素,只是帮助开发人员理解上下文吗?它还有其他作用吗?这个概念有名字吗?我可以在我自己的方法中使用它吗?
我看到同样的事情发生在“in”和“at”上。

lmvvr0a8

lmvvr0a81#

语法允许你标记两次参数-一次用于函数内部(* 参数名称 ),一次用于调用时( 参数标签 *)。默认情况下,这两个参数是相同的(就像你的例子中的sender),但是当它使函数在调用位置更具可读性时,它们会有所不同:

prepare(for: aSegue, sender: something)

更容易理解为一个句子:

prepare(segue: aSegue, sender: something)

这听起来像是你在准备接下去,而不是为接下去做准备。
for对于在函数内部引用segue来说是一个可怕的名字,所以如果需要,你可以使用不同的名字。
这个想法是为了满足调用站点的可读性和实现中合理的命名这两个有时相互冲突的目标。
定义函数时,如果要使用单独的参数标签和参数名称,请首先指定参数标签,然后指定参数名称:

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

sayHello(to: "Pekka")

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

1dkrff03

1dkrff032#

这些forat不是swift的参数函数中的保留关键字,它们是参数标签,您可以自由定义,这对您的函数的用户更有意义
语法

func prepare([ARGUMENT LABEL][PARAMETER NAME]: String) {}

功能定义

func prepare(for segue: UIStoryboardSegue) {
   print(segue) //what your function scope knows
   // print(for) won't work, it's a label for function usage readability
}

函数调用

prepare(for: mySegue) //with argument label 
prepare(segue: mySegue) //without argument label

相关问题