我很快就崭露头角,现在我会努力学习。我写了有参数的函数:数字和与此数字兼容的函数:
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...
的实现不起作用以及编译器给出此错误的原因。
答案 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))
}