7ba*_*all 6 promise ios swift promisekit
这就是我使用PromiseKit 4.5的原因
api.getUserFirstName().then { name -> Void in
print(name)
}
Run Code Online (Sandbox Code Playgroud)
getUserFirstName()返回一个Promsise<String>.我更新到PromiseKit 6,现在抛出一个错误:
Cannot convert value of type '(_) -> Void' to expected argument type '(_) -> _'
这个错误信息对我来说没什么意义.我该如何解决?
编辑:所以这似乎解决了它,但我对这发生了什么事情几乎一无所知:
api.getUserFirstName().compactMap { name in
print(name)
}
Run Code Online (Sandbox Code Playgroud)
现在then()和之间的区别是什么compactMap()?
根据PromiseKit 6.0指南 then分为then,done和map
then 被提供先前的承诺价值并要求您返回承诺.done被提供前一个承诺值并返回一个Void承诺(这是链使用的80%)map是先前的承诺价值,并要求你返回一个非承诺,即.一个值.为什么会这样?正如开发者所说:
使用PromiseKit我们
then做了很多事情,我们依靠Swiftthen从上下文中推断出正确的.然而,对于多行then,它将无法做到这一点,而不是告诉你情况不明确,它会发明一些其他错误.经常是可怕的cannot convert T to AnyPromise.我们有一个故障排除指南来解决这个问题,但我相信工具才能正常工作,当你花费4年时间等待Swift解决问题并且Swift无法解决问题时,你会怎么做?我们选择在更高层次上找到解决方案.
所以可能在你的情况下需要使用 done
func stackOverflowExample() {
self.getUserFirstName().done { name -> Void in
print(name)
}
}
func getUserFirstName() -> Promise<String> {
return .value("My User")
}
Run Code Online (Sandbox Code Playgroud)
compactMap 让你在返回nil时得到错误传输.
firstly {
URLSession.shared.dataTask(.promise, with: url)
}.compactMap {
try JSONDecoder().decode(Foo.self, with: $0.data)
}.done {
//…
}.catch {
// though probably you should return without the `catch`
}
Run Code Online (Sandbox Code Playgroud)
在发布指南中查看更多信息
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |