这段代码在 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 )。但为什么要改变有关外部参数名称使用的任何内容?
请您参考如下方法:
我就此提交了错误报告,Apple 回复说更改是有意的。在我看来,能够说 reduce(0,+) 是优雅而简洁的,因此 reduce 的 API 应该声明不需要外部参数名称。在 Apple 的声明中,combine: 外部参数名称阐明了参数的用途。我们同意不同意。
