2017-07-02 94 views
0

为什么第一个函数调用在第二个函数调用产生错误时不会产生任何错误?我没有调用函数,只是简单地调用它。两个函数之间的差异是参数的数量。为什么调用一个函数,而不是传递一个参数值的工作,但更多没有?

func hello(firstName: String) { 
print("Hello \(firstName)") 
} 
hello(firstName:) 

func hello(firstName: String, lastName: String) { 
print("Hello \(firstName) \(lastName)") 
} 
hello(firstName:, lastName:) 
+2

这是因为,哦,等等,我的水晶球在哪里看到你得到的错误类型? – i6x86

+0

在第一种情况下,您正在创建一个具有函数签名的语句,如果您想要执行相同操作,则必须添加'_',因为您正在创建参数列表,但不传递值。 - > func(a:_,b:_) – Efren

回答

2

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

相关问题