需要属性来存储具有通用类型的完成处理程序

时间:2019-03-07 08:18:30

标签: ios swift generics properties

我已经定义了这样的类型别名:

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 :(得分: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

}