是否可以使用具有Swift功能的速记参数名称。闭包具有此功能,但由于函数本身就是一个闭包,因此可能有一种方法来访问名称被省略的参数。这里是我的查询的详细信息:
您可以使用如下的速记参数名实现闭包:
someFunction(param1, { $0 > $1 })
不需要在闭包中提供参数名称,只需使用$ 0,$ 1等。
对于一个函数,您可以这样定义它:
func functionC(Int, String) {
}
在此省略param名称不会产生任何编译器错误。可能这是一个迅速的功能。这是否意味着我可以访问没有名字的参数。如果是,那怎么办?
答案 0 :(得分:0)
这可能是一个错误或一半实现的功能,因为我无法在文档中找到有关它的任何内容。使用你所描述的函数编译并运行良好:
func functionC(Int, String) {
println("function called")
}
functionC(10, "hello")
但是尝试使用带有闭包语法$0
和$1
的参数会导致错误:Anonymous closure argument not contained in a closure
非常清楚地表明您不允许使用匿名参数一个功能。
我认为这样做的目的是能够拥有所需函数的相同方法签名,即使您不必像以下示例那样使用所有参数:
protocol myProtocol{
func requiredFunc(Int, String) -> Bool
}
class myClass: myProtocol{
func requiredFunc(x: Int, String) -> Bool{
return x > 10
}
}
答案 1 :(得分:0)
您可以在闭包中使用缩写参数,因为编译器可以推断出参数及其类型。但是说func functionC(Int,String)与没有参数列表的闭包相同是不公平的。以相同方式声明的闭包也不起作用。就像你的函数声明一样,这个闭包是无效的,因为声明了参数:
{ (Int, String) -> Bool in
return $0 > $1
}
答案 2 :(得分:0)
短手参数不适用于函数。根据编译器,它们仅适用于闭包。 来到你陈述的案例:
func functionC(Int, String) {
}
这里它没有报告任何错误,因为你刚刚定义了函数来获取Int和String的参数但是因为它们没有被分配所以不能在任何地方使用。因此,没有其他目的可以将此案例用于验证编译器的工作原理。