【问题标题】:Difference between Int... and Int[]Int... 和 Int[] 之间的区别
【发布时间】:2014-06-24 12:51:28
【问题描述】:

为什么在传入 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... 时,它会按预期编译和工作。

【问题讨论】:

    标签: swift swift-playground


    【解决方案1】:

    当参数的类型是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... 语法称为Variadic parameter in the swift documentation

    (顺便说一句:我从coffeescript中借用了“splat”这个名字,我第一次遇到这种语法的地方)

    【讨论】:

    • 这里真正的问题是Int[]Int...(还)不能相互转换,目前还没有办法将数组传递给可变参数。
    • @Sulthan 我完全同意
    【解决方案2】:

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

    喜欢 sum(3,4,5,6)

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

    喜欢 sum([3,4,5,6])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2020-11-17
      相关资源
      最近更新 更多