2017-02-21 3 views
-2

私はXcode 8.2.1を使用しています。なぜArray.maxをこのように呼び出すことができますか?

public func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?

引数ラベルはbyで、引数名がareInIncreasingOrderです:私は、アレイのマニュアルを見れば、私はmax方法については、この宣言を見つけます。ラベルは明示的に指定されているので、関数の呼び出しに含める必要があると思っていましたが、ラベルを省略すると次のコードが機能します(例:by)。

メソッドを呼び出すときに引数ラベルを使用する方法を誤解していますか?または、私のコード例はmaxメソッドの別のバージョンを呼び出すのですか?

例コード:

let names = ["Talyor", "Paul", "Adele"] 

let longest = names.max { $1.characters.count > $0.characters.count } 
print(longest!) // "Taylor 
+2

'names.max(by:{$ 1.characters.count> $ 0.characters.count})'は期待どおりにコンパイルします。あなたが使ったのは、 "末尾クロージャ構文"です。 –

+1

の[Trailing Closure](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID102)セクションを参照してください。 "The Swift Programming Language"の本です。 – rmaddy

答えて

1

メソッドの最後のパラメータが閉鎖され、あなたがメソッド呼び出しの後に中括弧でそれを書いて、パラメータの名前を省略することができます。

Trailing Closure documentationを参照してください。

関連する問題