2016-10-06 4 views
0

Есть ли разница между этими двумя фрагментами? В первом блоке находится часть dispatch. Tksdispatch_async (queue, block) vs dispatch_async (queue) {block}

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

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

Чтение * Замыкание закрытий * в [Руководство по быстрому языку - Закрытие] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html) – vadian

ответ

1

Нет, между этими двумя блоками нет разницы.

Это часть способности Swift принимать затворы, предоставленные в качестве аргумента после круглых скобок функции.

NB: Этот ответ и его примеры написаны в Swift 3, но синтаксис для Swift 2 должен быть аналогичным.

Рассмотрим следующую ситуацию:

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

Эта функция может быть выражена либо как, похожий на ваших фрагментах:

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

или

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

Затворы с подобным поведением являются в других функциях/методах, требующих закрытия с, например autoreleasepool, Отправка и URLConnection. С личной точки зрения, я почти всегда использую первый пример, поскольку он более читабельен.

Смежные вопросы