Swift方法中的可变参数个数

Enc*_*PTL 9 swift

我想制作一个可以采用可变数量参数的方法.有点像在javascript中我可以使用arguments函数内的关键字获取所有参数.我怎么能在Swift中做到这一点?

我的主要目的是允许所有重载的构造函数转到一个方法,即使它根本没有传递参数.

class Counter {
    var count: Int = 0
    func incrementBy(amount: Int, numberOfTimes: Int) {
        count += amount * numberOfTimes
    }
}
Run Code Online (Sandbox Code Playgroud)

Seb*_*dal 16

在Swift iBook中有一个例子,第17页:

func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}

sumOf()             // returns 0
sumOf(1,2)          // returns 3
sumOf(42, 597, 12)  // returns 651
Run Code Online (Sandbox Code Playgroud)


ric*_*ter 14

Varargs很棒,但它们并不是真正用于表示不同事物的可选参数,如Counter问题中的示例所示.但是,函数重载可能有点过分:它打破了函数定义与其真实实现之间的耦合.

您可能需要的是参数的默认值:

func incrementBy(amount: Int, numberOfTimes num: Int = 1) {
    count += amount * num
}
Run Code Online (Sandbox Code Playgroud)

现在你将得到相同的行为调用incrementBy(2, numberOfTimes:1)incrementBy(2)(递增2,一次).

具有默认值的参数必须位于func/method签名中,并且必须标记.这将在本书的函数参数名称下面的几个小节中讨论.

  • 这是"正确"的答案.谢谢. (2认同)