ios - Xcode 中奇怪的 promiseKit 6 语法行为

标签 ios swift promisekit

我开始使用 PromiseKit 以防止自己编写具有 10 级回调的函数..

我使用 CocoaPods 安装了最新版本 (6.2.4),正在运行最新版本的 xCode,在我试图让它工作的文件中导入了 PromiseKit,但我得到了 Xcode 的非常奇怪的行为,导致了几个错误。

我打算做一些非常基础的事情来开始:

下面的函数为我正在开发的产品概览应用中的产品类别创建过滤器 (ProductListComponents)。

func createCategoryComponents(masterComponent: MasterComponent?) -> Promise<[ProductListComponents]> {
    return Promise { seal in
        //create a bunch of product category components
        seal.resolve([components])
    }
}

这里一切都很好。然后我尝试得到这个:

firstly {
    self.createCategoryComponents(masterComponent: masterComponent)
}.then { createdComponents in
    completion.resolve(nil, createdComponents)
}

这拒绝工作。首先,当我尝试输入 first 代码时,Xcode 建议:

firstly(execute: { () -> Guarantee<T> in
    //code
})

和:

firstly(execute: { () -> Thenable in
    //code
})

我在任何 PromiseKit 文档中都没有看到这种语法。它还建议使用奇怪的语法,例如.then 调用。当接受 Xcode 的建议时,它显然会显示错误,因为这不是正确的 PromiseKit 语法。当忽略 Xcode 的建议时,我得到这个:

enter image description here

显然这里出了点问题,我最好的猜测是 PromiseKit 的安装出了问题。我清理了我的项目,重新安装了 pod,重新启动了 Xcode,但似乎没有任何效果。

问题

有谁知道我在这里遇到了什么样的问题,更重要的是,我该如何解决它?

任何帮助将不胜感激。

最佳答案

根据release notes :

  • then is fed the previous promise value and requires you return a promise.
  • done is fed the previous promise value and returns a Void promise (which is 80% of chain usage)
  • map is fed the previous promise value and requires you return a non-promise, ie. a value.

因此,then 不应该在这里工作,因为您需要返回 promise 值。如果您只是将 then 更改为 done,它将起作用。

还有一些建议。

  • firSTLy 实际上是关于视觉装饰的(我相信它在 PMK 文档的某个地方,但我现在找不到),所以,如果这让你感到困惑,请尝试将其删除开始;
  • PMK 的主要特点是 chain .你绝对应该按照这个原则来写你的代码;
  • 另外,不要忘记错误。为此,在链的末尾使用 catch

代码的最终示例:

firstly {
    self.createCategoryComponents(masterComponent: masterComponent)
}
.done { createdComponents in
    completion.resolve(nil, createdComponents)
}
.catch { error in
    // don't forget about errors
}

关于ios - Xcode 中奇怪的 promiseKit 6 语法行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202100/

相关文章:

swift - 在 then block 中拒绝返回的 promise

ios - 如何防止sortedArrayUsingSelector删除重复条目(ios)?

swift - 在 Swift 中查找 View 内标签的 X 值位置

swift - SpriteKit SKColor 淡入/淡出

ios - 应用程序在后台时的 Firebase 监听器

swift - 在 Swift 中链接 promise 以初始化自定义对象

iOS 应用程序图像/图标位深度

ios - 从 Objective C 中的函数返回函数?

ios - 转换 MGLAnnotationView subview

swift - PromiseKit 在 Promises 中包装外部闭包