【发布时间】:2017-02-21 15:21:28
【问题描述】:
我使用的是 Xcode 8.2.1。如果我查看 Array 的文档,我会发现 max 方法的声明:
public func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?
参数标签为by,参数名称为areInIncreasingOrder。由于标签是明确指定的,我认为它必须包含在对函数的调用中,但如果我省略标签(即by),则以下代码有效。
我是否误解了调用方法时如何使用参数标签?或者,我的示例代码是否调用了不同版本的 max 方法?
示例代码:
let names = ["Talyor", "Paul", "Adele"]
let longest = names.max { $1.characters.count > $0.characters.count }
print(longest!) // "Taylor
【问题讨论】:
-
并且
names.max(by: { $1.characters.count > $0.characters.count })确实按预期编译。您使用的是“尾随闭包语法”。 -
参见“Swift 编程语言”一书中的Trailing Closure 部分。