Нет, между этими двумя блоками нет разницы.
Это часть способности 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
. С личной точки зрения, я почти всегда использую первый пример, поскольку он более читабельен.
Чтение * Замыкание закрытий * в [Руководство по быстрому языку - Закрытие] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html) – vadian