Swift 无法转换类型为';[Int]';到预期的参数类型';Int';
我是swift的新手,现在我正在努力学习。我写了一个有参数的函数:数字和处理这些数字的函数: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
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
。这就是类型不匹配的原因。