2016-09-22 23 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)