【问题标题】:Why can I call Array.max this way? [duplicate]为什么我可以这样调用 Array.max? [复制]
【发布时间】: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 部分。

标签: swift swift3


【解决方案1】:

当方法的最后一个参数是闭包时,可以将其写在方法调用之后的大括号中,并省略参数名称。

请参阅Trailing Closure documentation

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多