Требуется свойство для хранения обработчика завершения с универсальным типом - PullRequest
0 голосов
/ 07 марта 2019

Я определил typealias как это:

public typealias ResponseCompletion<T> = (Result<T>, [AnyHashable: Any]?) -> Void

Тогда у меня есть класс со связанным методом:

public func load<T>(completion: @escaping ResponseCompletion<T>)

это работает нормально, пока я не перешлю обработчик завершения из этого метода в другой. Но теперь у меня есть требование хранить обработчик завершения для последующего использования.

Когда я делаю что-то вроде этого:

class ServiceOperation<T: Any>: Operation {
    private let completion: ResponseCompletion<T>

А потом попробуйте сохранить обработчик

    public func load<T>(Result<T>, [AnyHashable: Any]?) -> Void {
        self.completion = completion
    }


Я получаю следующую ошибку:

Cannot assign value of type 'ResponseCompletion<T>' (aka '(Result<T>, Optional<Dictionary<AnyHashable, Any>>) -> ()') to type '(Result<T>, [AnyHashable : Any]?) -> Void'


У кого-нибудь есть идея, как правильно определить свойство, чтобы я мог хранить обработчик завершения?

1 Ответ

0 голосов
/ 07 марта 2019

Я не уверен, что вы хотите достичь, но этот код будет хранить completion после того, как вы вызовете load() функцию.

struct Result<T> {}
typealias ResponseCompletion<T> = (Result<T>, [AnyHashable: Any]?) -> ()
class ServiceOperation<T: Any>: Operation {
    private var completion: ResponseCompletion<T>?
    public func load(completion: @escaping ResponseCompletion<T>) {
        self.completion = completion
    }
}

Пример использования:

ServiceOperation<Int>().load { (result, params) in

}
...