2014-06-10 4 views
75

Мы можем объявить блок, как показано ниже в Objective-C.swift: Объявление закрытия как объявление блока

typedef void (^CompletionBlock) (NSString* completionReason); 

Я пытаюсь сделать это быстро, он дает ошибку.

func completionFunction(NSString* completionReason){ } 
typealias CompletionBlock = completionFunction 

Ошибка: Использование необъявленная 'completionFunction'

Определение:

var completion: CompletionBlock = { } 

Как это сделать?

Update:

Согласно @ ответ jtbandes, я могу создать замыкание с несколькими аргументами, как

typealias CompletionBlock = (completionName : NSString, flag : Int) ->() 
+1

@Downvotters: Пожалуйста, объясните, что не так с этим вопросом Тион? – Mani

+1

Есть люди, которые чувствуют, что сначала нужно научиться быстрому языку, а затем написать. Глупые чувства ... –

+0

@Mani Привет, не могли бы вы также указать, как вы присвоили бы этот псевдоним типа 'var' (т. Е.' Var completion: CompletionBlock = {....} 'используя несколько аргументов? Спасибо. – Unheilig

ответ

115

syntax for function types является (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+.

+0

Если это займет больше двух аргументов, как мы можем это сделать? Не могли бы вы направить меня на ссылку в этой книге или на другую? – Mani

+0

Лучшая книга для Swift: Apple Inc. «Язык быстрого программирования». IBooks. Https: // itun .es/ca/​​jEUH0.l –

+0

@NSArray Я знаю, что для быстрой доступна только одна книга. Но я спрашиваю об этой соответствующей главе с темой ... :) – Mani

9

Here - это потрясающий блог о скором закрытии.

Вот некоторые примеры:

В качестве переменной:

var closureName: (inputTypes) -> (outputType) 

В качестве необязательного переменной:

var closureName: ((inputTypes) -> (outputType))? 

как тип псевдонима:

typealias closureType = (inputTypes) -> (outputType) 
Смежные вопросы