我注意到一些方法,例如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)
}
答案 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将该名称用作本地参数名称和外部参数名称。
答案 1 :(得分:0)
名字是公共名称,第二名是私人(只能在功能中使用)