2016-09-22 22 views
1

今天我在Xcode中打开了我的项目,它需要将当前的Swift转换为Swift 3.转换后,我发现函数的所有参数都有一个下划线。例如,func didGetWeather(_ weather: Weather) {}。我试图拿走下划线,它工作正常。我想知道那些下划线是什么。iOS Swift 3参数在前面有下划线

+0

检查[斯威夫特3的这一个https://github.com/apple/swift-evolution/blob/master/proposals/0046-first-label.md –

+0

可能重复:为什么符号\ _是在发送者之前在动作参数中添加的?](http://stackoverflow.com/questions/39554622/swift-3-why-symbol-is-added-before-before-sender-in-parameters-of-action) – kennytm

回答

4

在swift3之前默认的第一个参数的标签没有在函数调用中列出,在swift3中,未命名参数的方式是在签名中的参数名称之前放置一个下划线,swift3 migrator add下划线函数第一个参数不会打破依赖于不在函数调用中放置第一个标签的现有代码。

0

是的,它在Swift 3.0中的更新日志。

所有功能参数有标签,“_”与第一的功能:

现在下面的所有默认的方法也有(_)。

override func viewWillAppear(_ animated: Bool) 
override func didMoveToView(_ view: SKView) 
func textFieldShouldReturn(_ textField: UITextField) -> Bool 
2

按照苹果的文档:

如果你不想为一个参数一个参数的标签,写一个下划线(_),而不是该参数的一个明确的说法标签。

func someFunction(_ firstParameterName: Int, secondParameterName: Int) { // In the function body, firstParameterName and secondParameterName // refer to the argument values for the first and second parameters. }

someFunction(1, secondParameterName: 2)

如果当你调用函数中的参数有一个参数标签,该参数必须进行标识。

在斯威夫特2,我们用于声明类似的功能:

func myFunc(param1 param:String) {}

,我们不得不把它想:

myFunc(param1:)

但后来苹果推出了一种省略使用下划线(_)的参数标签,函数声明将为:

func myFunc(_ param:String) {}

,然后我们可以调用函数有两种方式:

myFunc(_:) // when we don't want to pass any parameters

或者

myFunc(param:"some string") // when we want to pass any parameters

第一种方式(使用_)主要用于当我们想定义一个选择器。对于如:

someButton.addTarget(self, action: #selector(shareCatalog(_:)), for: .touchUpInside)