Мы можем объявить блок, как показано ниже, в Objective-C.
typedef void (^CompletionBlock) (NSString* completionReason);
Я пытаюсь сделать это быстро, это дает ошибку.
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
Ошибка: использование необъявленной функции завершения
Определение:
var completion: CompletionBlock = { }
Как это сделать?
Обновить:
Согласно ответу @jtbandes, я могу создать закрытие с несколькими аргументами, например
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
var
(то есть,var completion: CompletionBlock = {....}
используя несколько аргументов? Спасибо.Ответы:
Синтаксис для типов функций является
(in) -> out
.typealias CompletionBlock = (NSString?) -> Void // or typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) } var completion: CompletionBlock = { result, error in print(error) }
Обратите внимание, что круглые скобки вокруг типа ввода требуются только начиная с Swift 3+.
источник
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
reason
" от тела метода "println(reason)
"Вот отличный блог о быстром закрытии.
Вот некоторые примеры:
В качестве переменной:
var closureName: (inputTypes) -> (outputType)
В качестве необязательной переменной:
var closureName: ((inputTypes) -> (outputType))?
Как псевдоним типа:
typealias closureType = (inputTypes) -> (outputType)
источник