您好,以下是关于在Swift中使用可变参数列表的闭包的正确方法:
在Swift中,可以像这样声明一个接受可变参数列表的函数:
protocol NumberType: Comparable, IntegerLiteralConvertible, IntegerArithmeticType {}
extension Int: NumberType {}
extension SequenceType where Generator.Element: NumberType {
func satisfy(closure:(args: Generator.Element...) -> ()) {
// Do something
closure(args: 1, 2, 3)
}
}
构建很顺利。当我尝试使用该函数时:
[1, 2].satisfy { (args) in
print (args)
}
Xcode可以像我期望的那样自动完成,但是在args括号关闭后立即,Xcode中的所有语法高亮都消失了,并出现了一条消息"Command failed due to signal: Segmentation Fault: 11"
,这似乎意味着Xcode非常困惑。
为了更好地理解,我打算看看Swift能否编写一个函数,该函数可以基于可变数量的参数返回答案(映射到获取暴力答案所需的for循环数)。 这将是一种简单的方法来测试回答问题,例如“给定一个Int数组,找到满足方程式a^3 + b^3 = c^3 + d^3的所有组合”。
let answer = array.satisfy ({ return pow($0, 3) + pow($1, 3) == pow($2, 3) + pow($3, 3) })
针对一个更优的解决方案。
"返回所有的2"只需
let answer = array.satisfy ({ return $0 == 2 })
一个for循环