func hello(name: String,#helloMessage: String) -> String { return "\(helloMessage),\(name)." }
第一个参数的签名的默认行为发生了巨大变化.要了解参数标签(例如“外部参数”)和参数名称(例如“本地参数”)的工作原理,请阅读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)
原来的答案
If you want to provide an external parameter name for a function
parameter,and the local parameter name is already an appropriate name
to use,you do not need to write the same name twice for that
parameter. Instead,write the name once,and prefix the name with a
hash symbol (#). This tells Swift to use that name as both the local
parameter name and the external parameter name.
摘录自:苹果公司“Swift编程语言”iBooks. https://itunes.apple.com/ru/book/swift-programming-language/id881256329?l=en&mt=11