我已经定义了这样的类型别名:
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'
任何人都有一个主意,如何正确定义属性,以便我可以存储完成处理程序?
答案 0 :(得分:0)
我不确定您要实现什么,但是在您调用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
}