此代码在Swift 1.1中是合法的:
let arr = Array(1...100)
let sum = arr.reduce(0,+)
但在Swift 1.2中它不再合法。相反,我被迫明确使用combine:
参数名称:
let arr = Array(1...100)
let sum = arr.reduce(0,combine:+)
为什么呢?我发现他们的声明没有区别 - 除了新的@noescape
属性(很好地解释了here)。但为什么 会改变外部参数名称的使用呢?
答案 0 :(得分:3)
我提交了一份有关此问题的错误报告,Apple回复称此更改是故意的。在我看来,能够说reduce(0,+)
优雅而精辟,因此reduce
的API应该声明外部参数名称是不必要的。在Apple的陈述观点中,combine:
外部参数名称阐明了参数的用途。我们同意不同意。
答案 1 :(得分:0)
您可以随时使用reduce
函数进行序列 - 它们不会强制combine:
参数名称。
reduce(1...5, 0, +)