1

为什么在传入 Int 时以下内容无法编译(因为错误:找不到接受提供的参数的 '_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... 时,它会按预期编译和工作。

4

2 回答 2

3

当参数的类型是所有后续参数时,Int...所有后续参数都会为您打包到数组中,而只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...语法在 swift 文档中称为Variadic 参数

(旁白:我从咖啡脚本中借用了“splat”这个名字,我第一次遇到这种语法的地方)

于 2014-06-24T13:06:49.333 回答
0

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

像 sum(3,4,5,6)

WhileInt[]表示包含 Ints 的单个参数。(像一个数组)

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

于 2014-06-24T13:06:48.347 回答