具有速记参数名称的Swift函数

时间:2014-07-27 16:38:27

标签: ios swift

是否可以使用具有Swift功能的速记参数名称。闭包具有此功能,但由于函数本身就是一个闭包,因此可能有一种方法来访问名称被省略的参数。这里是我的查询的详细信息:

您可以使用如下的速记参数名实现闭包:

someFunction(param1, { $0 > $1 })

不需要在闭包中提供参数名称,只需使用$ 0,$ 1等。

对于一个函数,您可以这样定义它:

    func functionC(Int, String) {

    }

在此省略param名称不会产生任何编译器错误。可能这是一个迅速的功能。这是否意味着我可以访问没有名字的参数。如果是,那怎么办?

3 个答案:

答案 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的参数但是因为它们没有被分配所以不能在任何地方使用。因此,没有其他目的可以将此案例用于验证编译器的工作原理。