2016-10-06 3 views
0

Gibt es einen Unterschied zwischen diesen beiden Snippets? In der ersten befindet sich der Block innerhalb des dispatch Teils. Tksdispatch_async (Warteschlange, Block) vs. dispatch_async (Warteschlange) {block}

  dispatch_async(dispatch_get_main_queue(),{ 
       //do something 
      }) 

      dispatch_async(dispatch_get_main_queue()){ 
       //do something 
      } 
+0

Lesen Sie * Trailing Closures * in [Swift Language Guide - Closures] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html) – vadian

Antwort

1

Nein, es gibt keinen Unterschied zwischen diesen beiden Blöcken.

Es ist ein Teil von Swifts Fähigkeit, Verschlüsse zu akzeptieren, die als ein Argument nach den Funktionsknüppeln bereitgestellt werden.

NB: Diese Antwort und ihre Beispiele sind in Swift 3 geschrieben, aber die Syntax für Swift 2 sollte ähnlich sein.

Betrachten Sie die folgende Situation:

func a(callback: (_ s: String) -> Void) { 
    callback(s: "hello there") 
} 

Diese Funktion kann entweder, ähnlich wie Ihre Schnipsel ausgedrückt werden:

a(callback: { str in 
    print(str) // prints "hello there" 
}) 

oder

a() { str in 
    print(str) // also prints "hello there" 
} 

Verschlüsse mit ähnlichem Verhalten sind gesehen in anderen Funktionen/Methoden, die Schließung erfordern s wie autoreleasepool, Versand und URLConnection. Von einem persönlichen Standpunkt aus benutze ich fast immer das erste Beispiel, da es besser lesbar ist.

Verwandte Themen