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

时间:2015-08-16 20:25:13

标签: swift function parameters

我注意到一些方法,例如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)
}

2 个答案:

答案 0 :(得分:2)

来自Apple的文档:

  

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

     

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

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

速记外部参数名称

  

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

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

答案 1 :(得分:0)

名字是公共名称,第二名是私人(只能在功能中使用)