更新(Swift 3.*...)
第一个参数签名的默认行为发生了巨大变化。要了解参数标签(例如“外部参数”)和参数名称(例如“本地参数”)的工作原理,请阅读 Apple Swift 手册中的“函数参数标签和参数名称”一章。
一些例子:
func someFunction(parameterName: Int) { parameterName }
someFunction(parameterName: 5) // argument label not specified
func someFunction(argumentLabel parameterName: Int) { parameterName }
someFunction(argumentLabel: 5) // argument label specified
func someFunction(_ parameterName: Int) { parameterName }
someFunction(5) // argument label omitted
方法和函数之间的这种行为没有区别。
更新 (Swift 2.*)
下面描述的功能已被弃用,需要将参数名称写入两次才能获得与之前使用哈希符号相同的行为。
更新(示例)
对于函数:当函数被调用并且某些参数的用途不明确时,您可以为这些参数提供外部名称。
func someFunction(parameterName: Int) { parameterName }
someFunction(5) // What is the meaning of "5"?
func someFunction(externalParameterName parameterName: Int) { parameterName }
someFunction(externalParameterName: 5) // Now it's clear.
但如果外部名称和本地名称相同,则只需在参数名称前写一个井号即可。
func someFunction(#parameterName: Int) { parameterName }
// It's actually like:
// func someFunction(parameterName parameterName: Int) { parameterName }
someFunction(parameterName: 5)
对于方法:默认情况下,第一个参数名称仅是本地的(如函数),但第二个和后续参数名称都是本地和外部的(就像您在参数名称前写一个井号,这个 # 隐含在那里) :
class SomeClass {
func someMethodWith(firstParameter: Int, andSecondParameter: Int) { ... }
}
SomeClass().someMethodWith(5, andSecondParameter: 10)
您也可以使用#(或添加显式外部名称)作为方法的第一个参数,但它与 Objective-C 风格的调用不匹配。
class SomeClass {
func someMethodWith(#firstParameter: Int, andSecondParameter: Int) { ... }
}
SomeClass().someMethodWith(firstParameter: 5, andSecondParameter: 10)
原答案
如果您想为函数提供外部参数名称
参数,并且本地参数名称已经是适当的名称
要使用,您不需要为此写两次相同的名称
范围。取而代之的是,只写一次名称,并在名称前加上
井号 (#)。这告诉 Swift 使用该名称作为本地
参数名称和外部参数名称。
摘自:Apple Inc. “Swift 编程语言”。电子书。 https://itunes.apple.com/ru/book/swift-programming-language/id881256329?l=en&mt=11