我正试图消除代码中的一些警告,但似乎无法从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
闭包采用了Optional
Error
参数,所以我怀疑您的旧代码是如何通过传递错误的闭包来工作的。我觉得你的foo
方法声明应该是这样的,
func foo(arg1: Int, arg2: Int, completionHandler: @escaping (Error?) -> Void) {
// body
}
但是,对于最新的PromiseKit
,您可以通过如上所述传递Optional
Error
来更新completionHandler
,以创建如下所示的Promises
,
Promise { foo(arg1: 1, arg2: 2, completionHandler: $0.resolve) }