Свифт: заявление о закрытии заявление блока
мы можем объявить блок, как показано ниже в Objective-C.
typedef void (^CompletionBlock) (NSString* completionReason);
Я пытаюсь сделать это в swift, это дает ошибку.
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
ошибка: использование необъявленной 'completionFunction'
определение :
var completion: CompletionBlock = { }
как это сделать?
обновление:
согласно ответу @jtbandes, я могу создать закрытие с несколькими аргументами, например
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
2 ответа:
The синтаксис для функций типа и
(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+.
здесь Это удивительный блог о быстром закрытии.
вот несколько примеров:
переменной:
var closureName: (inputTypes) -> (outputType)
в качестве необязательной переменной:
var closureName: ((inputTypes) -> (outputType))?
в качестве псевдонима типа:
typealias closureType = (inputTypes) -> (outputType)