我是Swift的新手,我在Playground中遇到编译时错误(在“返回f(值)”语句中突出显示):
错误:MyPlayground.playground:6:14:错误:无法将类型'[Int]'的值转换为预期的参数类型'Int' 返回f(值)
代码如下:
func max (_ values : Int...) -> Int {
var maxVal : Int = values[0]
for i in values {
if (i > maxVal) {
maxVal = i
}
}
return maxVal
}
func fun (by f:(Int...) -> Int, values:Int... ) -> Int {
return f(values)
}
print(fun(by:max, values:1,2,3,4,5))
代码中的错误是什么?谢谢你的进步。
编辑: 答案“如何使用可变参数转发函数?”建议用数组参数调用另一个函数,我不想要,因为会有额外的函数调用开销。
我的问题是:代码在语法上看是正确的,请帮助指出可能的错误,以便在其他地方遇到我可以纠正它。感谢。
实际上如果我用“[Int]”替换所有“Int ...”,一切正常,但调用者声明会有点难看......
编辑2: 从Swift 4.1开始(在Xcode 9.2中),转发可变参数的函数将IMPLICITLY将其更改为单个参数数组的单个参数。解决方法:
func max (_ values : [Int]) -> Int {
var maxVal : Int = values[0]
for i in values {
if (i > maxVal) {
maxVal = i
}
}
return maxVal
}
func fun (by f:([Int]) -> Int, values:Int... ) -> Int {
return f(values)
}
print(fun(by:max, values:1,2,3,4,5))
不知道这是否是编译器的错误:)