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