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

What are the new "for", "at", "in" keywords in Swift3 function declarations?

提问人:Pekka 提问时间:8/5/2016 最后编辑:Pekka 更新时间:4/17/2023 访问量:7049

问:

我正在学习一个用 Swift 2 编写的 Swift 初学者教程。

它包含类似(随机示例)的代码

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 seguesegue

它是否仅仅是装饰 - 一个除了帮助开发人员理解上下文之外没有意义的元素?它还能做其他事情吗?这个概念有名字吗?我可以在自己的方法中使用它吗?

我看到“in”和“at”也会发生同样的情况。

swift xcode swift3

评论

0赞 Yury 8/5/2016
语法错误?应该是 forSegue:,参数标签
0赞 Pekka 8/5/2016
@ShadowOf不,它似乎是新的 Swift 3 方式
0赞 Pekka 8/5/2016
@El我明白了,但它在语法上是什么?参数是命名的还是在方法中?如果是,则必须以某种方式定义。for seguesegueseguefor
3赞 Martin R 8/5/2016
它在 Swift <= 2 中被称为“外部参数名称”,在 Swift 3 中被称为“参数标签”:stackoverflow.com/questions/38410889/..., developer.apple.com/library/prerelease/content/documentation/...

答:

29赞 jrturton 8/5/2016 #1

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

prepare(for: aSegue, sender: something)

作为句子,比以下句子更具可读性:

prepare(segue: aSegue, sender: something)

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

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

这个想法是为了满足有时相互冲突的目标,即呼叫站点的可读性和实现中的合理命名。

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

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

sayHello(to: "Pekka")

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

2赞 letthefireflieslive 4/17/2023 #2

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

语法

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