當定義一個函數或方法參數,除了類型,每個參數必須具有一個本地名稱,其識別從該函數的主體中的變量訪問的名稱,但它也可以有一個外部名稱,在調用該函數時使用。
func doSomething(externalName internalName: Int) {
print(internalName)
}
doSomething(externalName: 4)
用下劃線代替外部名稱意味着沒有爲該參數定義外部名稱。在上面的例子「:
func doSomething(_ internalName: Int) {
print(internalName)
}
表示該功能是通過將參數,而不受外部名稱被加前綴被調用:
doSomething(5)
外部名稱來識別每個參數是什麼是有用的,使代碼更易於閱讀。例如,比較這:
update(33, 1, data)
與此:
update(invoiceId: 33, itemId: 1, invoiceDetails: data)
因爲它的實用性,當沒有明確指定時,Swift會自動「提升」本地名稱到外部名稱。在斯威夫特的1.x:
- 全球所有的功能都沒有默認外部名稱
- 所有方法都參數,但第一個自動生成的外部名稱
- 所有初始化具有自動生成的外部名
在Swift 2.0中,全局函數遵循與方法相同的規則。
自動生成的外部名稱意味着,例如,像這樣的功能:
func updateInvoice(invoiceId: Int, invoiceDetailId: Int, invoiceDetail: data)
將自動具有其簽名更新爲:
func updateInvoice(invoiceId: Int, invoiceDetailId invoiceDetailId: Int, invoiceDetail invoiceDetail: data)
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
與自動增加一個外部名的到兩個第二和第三(即第一個之後的所有參數)。
你的情況:
optional func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
第一個下劃線表示:不使用,也不該參數產生外部名。至於第二個參數,在調用該函數時引用爲didFinishPickingMediaWithInfo
,但它將作爲名爲info
的變量提供給imagePickerController
。
推薦閱讀:Function Parameter Names
因此,在這種情況下'didFinishPickingMediaWithInfo'是參數名稱,如果你調用的函數和'info'是你會在功能的實現使用的名稱,你會提供哪些資料? –
這不是所謂的揭祕參數名稱。你鏈接了一篇文章,解釋了Swift如何處理參數名稱。這是文章的本地名稱,而不是該主題的全球名稱。 –
它被稱爲通配符表達式。 – Boon