我正试图摆脱代码中的一些警告,并且似乎无法从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) }
,我不确定从那里去哪里。
答案 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) }