Это не печать 1, потому что вы передаете функцию, которая никогда не вызывается.
Это:
Post({ (image)->Void in
println(1)
})
объявляет временную функцию (а «выражение закрытия» - быстрый простой способ объявить анонимные функции, между { }
), который принимает аргумент в (String,NSError?)
пары, и ничего не возвращает. Затем он передает эту функцию в функцию Post
.
Но функция Post
ничего не делает с этим. Для запуска функции ее нужно вызвать. Если вы изменили Post
функцию следующим образом:
func Post(handler:ImageHandler){
println(3)
// call the handler that was passed in...
handler("blah",nil)
}
вы увидите, что печать 1.
Отметим, что image
аргумент получен PostOnSocialMedia
и переменная image
аргумент внутри временной функции две разные переменные - правила видимости означают, что объявленный внутри временной функции маскирует ту, что находится во внешней области. Но они очень разные (на самом деле они разные типы - одна строка, а вторая - 2-х кортежей строки и ошибка).
Попробуйте reading this для краткого введения функций и замыканий первого порядка в Swift.