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
中返回Promise
:firstlyreturn 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语法行为的主要内容,如果未能解决你的问题,请参考以下文章