这是一个非常初学的问题,但我总是想知道,例如在这个方法中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
为什么我们将didFinishLaunchingWithOptions
作为参数?我了解application
类型为UIApplication
,而launchOptions类型为UIApplicationLaunchWithOptionsKey: any
,但为什么我们只有这个'stub',其名称为didFinishLaunchingWithOptions
,如果你知道的话我的意思是什么?
此外,在第一个参数之前,下划线的含义是什么?我不得不把它放在那里,所以我的功能会起作用。
答案 0 :(得分:4)
在Swift中,所有参数都被命名。但是,有时这会变得很麻烦或导致函数内部出现奇怪的参数名称。例如,如果你有一个看起来像
的函数func makeNewThing(fromDifferentThing: SomeThing)
在函数内部将函数的参数称为fromDifferentThing
会感到奇怪。
要解决这个问题,Swift允许您提供相同的函数参数两个名称。一个参数名称将用于外部该函数,另一个名称将用于内部该函数。外部参数名称称为参数标签,内部名称通常称为参数名称。
因此,在我的示例中,您可以将函数定义为
func makeNewThing(fromDifferentThing thing: SomeThing)
然后在函数内部引用参数thing
,但将函数调用为
makeNewThing(fromDifferentThing: thing)
下划线也与此有关。有些函数并不需要解释它们的参数是什么,所以Swift允许你说你的函数的第一个参数有无参数标签。你可以简单地称这样的函数为:
function(argument1, label2: argument2, label3: argument3...)
并将其定义为:
func function(_ argument1: Type1, label2 argument2: Type2, /* ...and so on */)
答案 1 :(得分:2)
我了解
application
类型为UIApplication
,launchOptions
类型为[IApplicationLaunchWithOptionsKey: any]
在第一个参数之前,下划线是什么意思?
这两个问题是相关的。这两个名称中的第一个名为参数标签。如果存在,这是在调用方法时在冒号前面写的内容。如果不存在,参数名称将成为其标签。如果您不想要参数的参数标签,请改为使用下划线(_
)。
以下是这三个选项的摘要:
func foo(bar baz:String)
,请致电foo(bar:"Hello")
func foo(baz:String)
,请致电foo(baz:"Hello")
_
作为参数标签 - func(_ baz:String)
,致电foo("Hello")