Xcode中奇怪的promiseKit 6语法行为

Posted

技术标签:

【中文标题】Xcode中奇怪的promiseKit 6语法行为【英文标题】:Odd promiseKit 6 syntax behavior in Xcode 【发布时间】:2018-05-06 16:37:49 【问题描述】:

我开始使用 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)

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

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

和:

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

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

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

问题

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

任何帮助将不胜感激。

【问题讨论】:

您需要像这样在firstly 中返回Promisefirstlyreturn self.createCategoryComponents(masterComponent: masterComponent).then... 嗨@DávidPásztor,感谢您的评论。我已经尝试过你的方法,但它似乎并没有解决问题。你有什么其他想法可以让 PromiseKit 语法像他们的文档一样工作吗? 【参考方案1】:

根据release notes:

then 接受了之前的承诺值,并要求您返回一个承诺。 done 被输入之前的承诺值并返回一个 Void 承诺(这是链使用量的 80%) map 提供了先前的承诺值,并要求您返回非承诺,即。一个值。

所以,then 不应该在这里工作,因为您需要返回承诺值。如果您只是将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

【讨论】:

啊,关于第二个建议很抱歉。你的代码格式不是很好,所以我认为你有这个问题。

以上是关于Xcode中奇怪的promiseKit 6语法行为的主要内容,如果未能解决你的问题,请参考以下文章

xcode中奇怪的segue动画

类中奇怪的异步/等待行为

zsh 中奇怪的“工作”行为

UIImageView 中奇怪的对齐行为

列表理解中奇怪的 lambda 行为

C中奇怪的malloc行为