从PromiseKit包装迁移



我正试图消除代码中的一些警告,但似乎无法从PromiseKit的wrap迁移出去。具体来说,在6.0中,发布的详细信息说我不应该使用它,而应该使用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) }

但这引发了一个不同的错误Unable to infer closure type in the current context,我不确定该从哪里开始。

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

@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闭包采用了OptionalError参数,所以我怀疑您的旧代码是如何通过传递错误的闭包来工作的。我觉得你的foo方法声明应该是这样的,

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

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

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

相关内容

  • 没有找到相关文章

最新更新