типизирующее закрытие в Swift - PullRequest
0 голосов
/ 17 мая 2018

Я использую SDK, разработанный в Objective-C.Мое приложение является гибридным (поддерживает как Objc, так и Swift), и мне нужно использовать блок завершения SDK.На стороне SDK это было определено как,

typedef void (^SomethingCompletionBlock)(NSArray<id<Something> > *_Nullable result, NSError *_Nullable error); 

На стороне приложения мне нужно использовать, как,

SDKService.fetchSomething(withModel: model) { (result, error) in

    if error != nil {

       completionBlock(result, error?)

    }
}

Интересно, что было бы подписью completeBlock в моей части Swift?Я пытаюсь что-то вроде ниже, но получаю ошибку.

typealias SomethingSearchCompletionBlock = (result: Array<Something>?, error: Error?)

Ошибка:

Невозможно вызвать значение не функционального типа 'SomethingSearchCompletionBlock' (aka '(результат: Optional>,ошибка: необязательно) ')

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Может быть, это поможет

typealias SomethingCompletionBlock = (_ result: [Something]?, _ erro: Error?) -> Void
0 голосов
/ 17 мая 2018

Необходимо добавить возвращаемое значение Void, а метки параметров не нужны

typealias SomethingSearchCompletionBlock = (Array<Something>?, Error?) -> Void
...