Swift中的变量参数

时间:2015-05-27 01:24:50

标签: swift

我有一段非常简单的代码,它使用Swift语言中的Variadic Parameters。

enter image description here

我不明白为什么抱怨。不是双倍......等于[双]

我知道我可以像这样传递:printList(2,3,4,5)。

我猜Variadic与我的想法有所不同。您可以传递多个参数。这是关于没有传递集合的论据。

2 个答案:

答案 0 :(得分:3)

如果要在函数中传递数组,请按照

进行操作
func printList(numbers:[Double]){

}

let numbers = [Double](count: 5, repeatedValue: 0.0)

printList(numbers)

如果你想传递相同类型的输入,但数字未知,你可以这样做

func printList(numbers:Double...){

}

printList(0.0,0.0,0.0)
printList(0.0,1.0,2.0,3.0)

答案 1 :(得分:2)

您的声明

func printList (numbers:Double...) {}

期望传递给printList的每个参数都是Double。因此它被调用如下:

printList (1.0, 2.0, 3.0)

如果你这样调用它:

printList ([1.0, 2.0, 3.0], [4.0, 5.0])

然后你在printList上调用[Double],而不是所需的Double,因此编译器将标记该调用站点。

Swift中缺少的一个运算符是apply(在Scheme和其他语言中称为),它接受一个函数和一个Sequence,并将seqeunce作为函数的单个参数进行解构。因此:

apply (printList, arguments: [1.0, 2.0, 3.0])

会'翻译'到:

printList (1.0, 2.0, 3.0)

重要,您当然可以将两个函数定义为:

func pL (numbers:Double...) { println (numbers) }  // better, use pL(numbers)!
func pL (numbers:[Double])  { println (numbers) } 

然后得到你想要的行为:

  7> pL (1.0, 2.0)
[1.0, 2.0]
  8> pL ([1.0, 2.0])
[1.0, 2.0]