2017-02-21 5 views
-2

Ich benutze Xcode 8.2.1. Wenn ich in der Dokumentation für Array aussehen finde ich diese Erklärung für die max Methode:Warum kann ich Array.max auf diese Weise aufrufen?

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

Das Argument Label by ist und das Argument Name ist areInIncreasingOrder. Da das Label explizit angegeben ist, dachte ich, dass es in einem Aufruf der Funktion enthalten sein muss, aber der folgende Code funktioniert, wenn ich das Label weglasse (d. H. by).

Missverstehe ich, wie Argument-Labels beim Aufruf einer Methode verwendet werden? Oder ruft mein Beispielcode eine andere Version der max-Methode auf?

Beispielcode:

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

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

Und 'names.max (von: {$ 1.characters.count> $ 0.characters.count})' kompiliert wie erwartet. Was Sie verwendet haben, ist die "Trailing Closure-Syntax". –

+1

Siehe den Abschnitt [Trailing Closure] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID102) von das Buch "The Swift Programming Language". – rmaddy

Antwort

1

Wenn der letzte Parameter einer Methode ein Verschluss ist, können Sie es in geschweiften Klammern schreiben nach der Aufruf der Methode und lassen Sie den Namen des Parameters.

Siehe Trailing Closure documentation.

Verwandte Themen