Możemy zadeklarować blok jak poniżej w Objective-C.
typedef void (^CompletionBlock) (NSString* completionReason);
Próbuję to zrobić szybko, to daje błąd.
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
Błąd: użycie niezadeklarowanej funkcji uzupełniania
Definicja:
var completion: CompletionBlock = { }
Jak to zrobić?
Aktualizacja:
Zgodnie z odpowiedzią @ jtbandes, mogę utworzyć domknięcie z wieloma argumentami, tak jak podobne
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
var
(tj.var completion: CompletionBlock = {....}
Używając wielu argumentów? Dzięki.Odpowiedzi:
Składnia typów funkcyjnych jest
(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) }
Zwróć uwagę, że nawiasy wokół typu danych wejściowych są wymagane tylko od wersji Swift 3+.
źródło
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
reason
” od treści metody „println(reason)
”Oto niesamowity blog o szybkim zamykaniu.
Oto kilka przykładów:
Jako zmienna:
var closureName: (inputTypes) -> (outputType)
Jako opcjonalna zmienna:
var closureName: ((inputTypes) -> (outputType))?
Jako alias typu:
typealias closureType = (inputTypes) -> (outputType)
źródło