Swift中传递函数作为参数并使用可变参数时出现编译时错误
解决Playground中可变参数的编译错误
嘿,我来帮你搞定这个Swift编译错误!咱们先拆解下问题根源:
你定义的fun函数里,参数f是一个接受可变参数Int...的闭包,而values同样是Int...类型的可变参数。这里有个容易忽略的细节:可变参数在函数内部会被自动包装成[Int]数组。所以当你直接写return f(values)时,你其实是把一个[Int]数组传给了期望接收单个/多个Int值的f,这就导致了类型不匹配的编译错误。
修复方法
只需要把数组展开成可变参数传递就行,在values后面加上...,告诉Swift把这个数组拆成单个的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: 3, 1, 4, 1, 5)) // 输出结果:5
这样修改后,values数组就会被正确展开,f就能接收到它期望的可变参数了,编译错误也就消失啦~
内容的提问来源于stack exchange,提问作者Tony Wan
相关产品推荐
相关产品推荐

