Свифт: заявление о закрытии заявление блока


мы можем объявить блок, как показано ниже в 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 79

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)