首页 文章

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

提问于
浏览
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 ...时,它会按预期编译和工作 .

2 回答

  • 0

    当参数的类型是 Int... 时,所有后续的args都会为你聚集到数组中,而 Int[] 要求你传递 just one 参数,这是一个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”,我第一次遇到这种语法)

  • 3

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

    像总和(3,4,5,6)

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

    像总和([3,4,5,6])

相关问题