2016-07-13 16 views
1

I-Code bin Umwandlung, die nicht von mir zu flink ist 3.0 und es gibt einige Linien Ich verstehe nicht, die durch die Compiler gekennzeichnet werden:Was bedeutet ~> (Tilde größer als) in diesem Swift-Code?

public func setupAppearance() 
{ 
    if let delegate = delegate 
    { 
     firstWeekday~>delegate.firstWeekday?() 
     dayOfWeekTextColor~>delegate.dayOfWeekTextColor?() 
     dayOfWeekTextUppercase~>delegate.dayOfWeekTextUppercase?() 
     dayOfWeekFont~>delegate.dayOfWeekFont?() 
     weekdaySymbolType~>delegate.weekdaySymbolType?() 
    } 
} 

Hinweis: Dies ist nicht -> (Bindestrich, größer als) aber ~> (Tilde, größer als)

Ich habe diese Frage gefunden: What is the ~> (tilde greater than) operator used for in Swift? aber fand es nicht sehr hilfreich.

Kann mir jemand auf Dokumente zeigen, wie man das liest? Google, stackoverflow und github können leider nicht nach ~> suchen.

Dank

Greg

+3

Jemand hat einen benutzerdefinierten Operator erstellt (oder besser gesagt: Sie haben einen vorhandenen Operator entführt, um etwas anderes zu bedeuten, was schlimmer ist). Klicken Sie mit gedrückter Befehlstaste darauf und sehen Sie, wo Sie hinkommen. (Ein Grund, warum ich die Verwendung von benutzerdefinierten Operatoren rate ...) –

+0

@RobNapier '~>' ist nicht "ein bestehender Operator", also was meinst du? –

+1

Es ist tatsächlich. Es hat nur keine öffentlichen Implementierungen. Es ist im Swift-Header als Operator definiert. Es kann als Implementierungsdetail von Switch-Fällen verwendet werden, wenn ich mich richtig erinnere. –

Antwort

1

Ich glaube, dass der ursprüngliche Entwickler Swift benutzerdefinierte Operator für Thread Marshalling von iJoshSmith verwendet wurde.

func ~> <R> (
    backgroundClosure:() -> R, 
    mainClosure:  (result: R) ->()) 
{ 
    dispatch_async(queue) { 
     let result = backgroundClosure() 
     dispatch_async(dispatch_get_main_queue(), { 
      mainClosure(result: result) 
     }) 
    } 
} 
+0

Also, wenn ich es richtig verstehe, verwendet dieser Code eine undokumentierte Swift-Funktion, um die gesamte Datenstruktur von einem Objekt auf ein anderes zu kopieren, und dies geschieht im Haupt-Thread? –

+0

Was der benutzerdefinierte Operator "Swift" tut, ist die Ausführung des linken Abschlusses in einem Hintergrund-Thread. Wenn dies abgeschlossen ist, wird der rechte Abschluss am Haupt-Thread ausgeführt. Sie können auch Ihren Quellcode überprüfen, wenn er diese Bibliothek tatsächlich verwendet oder der ursprüngliche Autor des Codes eine eigene Implementierung dieses Operators erstellt hat. –

+0

Dies ist die richtige Antwort, da sie ihren eigenen Operator erstellt haben: infix operator ~> {} public func ~> (lhs: inout T ?, rechts: T?) -> T? { wenn lhs! = Nil && rhs! = Null { lhs = rhs } zurückgeben lhs } –