无法将类型“ [Int]”的值转换为预期的参数类型“ Int”

时间:2018-12-11 04:29:43

标签: swift

我很快就崭露头角,现在我会努力学习。我写了有参数的函数:数字和与此数字兼容的函数:

func anotherSum(_ numbers : Int...) -> Int {
   return numbers.reduce(0, +)
}

func makeSomething(_ numbers : Int..., f : (Int...) -> Int) {
   print(workFunction(numbers))
}

makeSomething(1,2,3,4,5,6,7,8, f: anotherSum)

但是编译会发出错误cannot convert value of type '[Int]' to expected argument type 'Int' 。当我尝试更改

之类的参数时

workFunction : ([Int]) -> Int)

func anotherSum(_ numbers : [Int]) -> Int

它可以正常工作,但是我仍然不明白为什么使用Int...的实现不起作用以及编译器给出此错误的原因。

1 个答案:

答案 0 :(得分:4)

由于Int...在函数体中被视为[Int],因此编译器不允许传递[Int]代替Int...。您最好按以下方式计算总和,

func makeSomething(_ numbers : Int..., workFunction : (Int...) -> Int) {
    let sum = numbers.map({ workFunction($0)}).reduce(0, +)
    print(sum)
}

或引入另一种方法,该方法接受Int的数组并返回sum。如下所示,

func anotherSum(_ numbers : [Int]) -> Int {
    return numbers.reduce(0, +)
}

func makeSomething(_ numbers : Int..., workFunction : ([Int]) -> Int) {
    print(workFunction(numbers))
}