从PromiseKit包装迁移

时间:2018-12-16 16:28:18

标签: ios swift promisekit

我正试图摆脱代码中的一些警告,并且似乎无法从PromiseKit的mysql -u root -p迁移过来。具体来说,在6.0版本中,发布细节说我不应该使用它,而应该使用wrap

我有一个功能:

init(resolver:)

以下工作正常:

func foo(arg1: Int, arg2: Int, completionHandler: @escaping () -> ())

我试图将其更改为(发行说明所建议的):

wrap({ foo(arg1: val1, arg2: val2, completionHandler: $0) })

这产生了一个错误Promise { foo(arg1: val1, arg2: val2, completionHandler: $0.resolve) } ,所以我试图解决该问题:

Generic parameter 'T' could not be inferred

但这触发了另一个错误Promise<Void> { foo(arg1: val1, arg2: val2, completionHandler: $0.resolve) } ,我不确定从那里去哪里。

1 个答案:

答案 0 :(得分:2)

下面是用于deprecated方法的wrap方法。

@available(*, deprecated, message: "See `init(resolver:)`")
public func wrap(_ body: (@escaping (Error?) -> Void) throws -> Void) -> Promise<Void> {
    return Promise { seal in
        try body(seal.resolve)
    }
}

如我们所见,completion闭包采用了Optional Error的参数,因此我怀疑通过传递错误的闭包,您的旧代码是如何工作的。我觉得您的foo方法声明应该是这样的,

func foo(arg1: Int, arg2: Int, completionHandler: @escaping (Error?) -> Void) {
    // body
}

但是对于最新的PromiseKit,您可以通过如上所述传递completionHandler Optional来更新Error,如下创建Promises

Promise { foo(arg1: 1, arg2: 2, completionHandler: $0.resolve) }