Swift 无法转换类型为';[Int]';到预期的参数类型';Int';

Swift 无法转换类型为';[Int]';到预期的参数类型';Int';,swift,Swift,我是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

我是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)
但compile发出错误
无法将“[Int]”类型的值转换为预期的参数类型“Int”
。当我试图改变论点的时候

workFunction:([Int])->Int)

func另一个和(uu数字:[Int])->Int


它工作得很好,但我仍然不明白为什么用
Int..
实现不起作用,以及为什么编译器会给出这个错误。

因为
Int..
在函数体中被视为
[Int]
,所以编译器不允许用
[Int]
代替
Int..
。你最好按下面的方法计算总数

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

func makeSomething(_ numbers : Int..., workFunction : ([Int]) -> Int) {
    print(workFunction(numbers))
}
或者介绍另一种方法,该方法接受
Int
数组并返回sum。如下所示

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

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

就编译器而言,
Int..
[Int]
在这个上下文中是完全不相关的类型。如果您想让它正常工作,您需要修改另一个sum以获取
[Int]
。目前没有在Swift中“splat”数组的方法。
Int..
将立即在函数体中变成
[Int]
anotherSum(Int…)
应该包含多个参数,而每个参数都是一个
Int
。调用
workFunction(numbers)
本质上是
anotherSum([Int])
,您只需将一个参数
[Int]
而不是
Int
传递给
anotherSum
。这就是类型不匹配的原因。