Int ...和Int []之间的区别

时间:2014-06-24 12:51:29

标签: swift swift-playground

为什么下面的代码无法编译(因为错误:在传入Int ...时找不到接受提供的参数的#con; _conversion'的重载)?

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

func averageOfInts(numbers: Int...) -> Int{
    var sumNums: Int = 0
    sumNums = sumOfNumbers(numbers)
    var count = numbers.count
    return sumOfNumbers(numbers)/numbers.count
}

但是当使用Int []代替Int ...时,它会按预期编译和工作。

2 个答案:

答案 0 :(得分:3)

当参数的类型为Int...时,所有后续的args都会为你聚集到数组中,而Int[]要求你传递只有一个参数,一个数组Ints:

func sumOfIntsSplat(numbers:Int...) -> Int {
    var sum = 0;
    for number in numbers{
        sum += number
    }
    return sum
}
func sumOfIntsArray(numbers: Int[]) -> Int{
    var sum = 0;
    for number in numbers{
        sum += number
    }
    return sum
}

用法

sumOfIntsSplat(1,2,3,4,5)
sumOfIntsArray([1,2,3,4,5])

Int...语法称为Variadic parameter in the swift documentation

(除此之外:我借用了coffeescript的名字" splat"我第一次遇到这种语法)

答案 1 :(得分:0)

Int...表示Int类型的一个或多个参数。

如sum(3,4,5,6)

虽然Int[]表示包含Ints的单个参数。 (像数组一样)

像sum([3,4,5,6])