为什么调用一个函数,而不是传递一个参数值的工作,但更多没有?
问题描述:
为什么第一个函数调用在第二个函数调用产生错误时不会产生任何错误?我没有调用函数,只是简单地调用它。两个函数之间的差异是参数的数量。为什么调用一个函数,而不是传递一个参数值的工作,但更多没有?
func hello(firstName: String) {
print("Hello \(firstName)")
}
hello(firstName:)
func hello(firstName: String, lastName: String) {
print("Hello \(firstName) \(lastName)")
}
hello(firstName:, lastName:)
答
The Swift Book不含有易于阅读的描述,但你的第一代码是在夫特有效的表达式,它返回(String)->Void
类型的闭合:
func hello(firstName: String) {
print("Hello \(firstName)")
}
var closure: (String)->Void = hello(firstName:)
closure("Taro") //->Hello Taro
在你的第二代码, hello(firstName:, lastName:)
不是斯威夫特一个有效的表达式,但hello(firstName: lastName:)
是有效的:
func hello(firstName: String, lastName: String) {
print("Hello \(firstName) \(lastName)")
}
//hello(firstName:, lastName:) //<-invalid
var closure2: (String, String)->Void = hello(firstName: lastName:)
closure2("Taro", "Yamada") //->Hello Taro Yamada
也许你已经见过这种符号的侧面#selector()
,但是这样的标记也可以在#selector()
之外使用,如上所示。
+0
“Swift Book不包含易于阅读的描述” - 您是轻描淡写的主人 – CRD
这是因为,哦,等等,我的水晶球在哪里看到你得到的错误类型? – i6x86
在第一种情况下,您正在创建一个具有函数签名的语句,如果您想要执行相同操作,则必须添加'_',因为您正在创建参数列表,但不传递值。 - > func(a:_,b:_) – Efren