Swift 函数,一个参数有两个名称

jen*_*dan 6 parameters function swift

我注意到一些方法,例如init(nibName nibName: String?, bundle nibBundle: NSBundle?),一个参数有两个“名称”,除了第一个不能在方法内部使用。在这种情况下,您不能使用bundle但可以使用 nibBundle。例如,当我打电话时,super.init(nibName: nibName, bundle: bundle)我收到错误“使用未解析的标识符‘捆绑’”。

我的问题是:它是什么(双命名参数)?如何正确使用?

编辑:现在很明显它是外部参数名称的东西。我有 UIViewController 的子类并覆盖以下方法。我不明白nibBundle 是从哪里来的?显然它没有在函数头中定义。

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
   super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
   let someBundle = nibBundle
   print(someBundle)
}
Run Code Online (Sandbox Code Playgroud)

0xJ*_*oKe 7

来自苹果的文档:

有时在调用函数时命名每个参数很有用,以指示传递给函数的每个参数的用途。

如果您希望您的函数的用户在调用您的函数时提供参数名称,请为每个参数定义一个外部参数名称,以及本地参数名称。你在它支持的本地参数名之前写一个外部参数名,用空格分隔:

func someFunction(externalParameterName localParameterName: Int) {
    // function body goes here, and can use localParameterName
    // to refer to the argument value for that parameter
}
Run Code Online (Sandbox Code Playgroud)

速记外部参数名称

如果要为函数参数提供外部参数名称,并且本地参数名称已经是合适的名称,则无需为该参数编写两次相同的名称。相反,将名称写入一次,并在名称前加上井号 (#)。这告诉 Swift 使用该名称作为本地参数名称和外部参数名称。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html