使用Swift的PromiseKit:终止承诺链

我正在尝试将PromiseKit与 Swift一起使用.我对它并不熟悉,并且似乎没有太多关于它与Swift一起使用的信息.

我似乎无法弄清楚如何终止承诺链.只要最后一个(终端)块然后包含一个语句,一切都很好:

firstly {
    // ...
}.then { obj in
    self.handleResult(obj)
}.catch { error in
    self.handleError(error)
}

但是,如果我尝试添加另一个语句,编译器会抱怨:

firstly {
    // ...
}.then { obj in
    self.handleResult(obj)
    self.doSomethingDifferent(obj)
}.catch { error in // compiler error: Missing return in a closure expected to return 'AnyPromise'
    self.handleError(error)
}

显然,解决方案是返回另一个承诺,但它在终端块中没有意义.还有什么我可以做的吗?

根据 http://promisekit.org/PromiseKit-2.0-Released/,在Swift Compiler Issues部分下:

The Swift compiler will often error with then. To figure out the
issue,first try specifying the full signature for your closures:

foo.then { x in
    doh()
    return bar()
}

// will need to be written as:

foo.then { obj -> Promise<Type> in
    doh()
    return bar()
}

// Because the Swift compiler cannot infer closure types very
// well yet. We hope this will be fixed.

// Watch out for  one-line closures though! Swift will
// automatically infer the types,which may confuse you:

foo.then {
    return bar()
}

因此,您必须将代码更改为:

firstly {
    // ...
}.then { obj -> Promise<WhateverTypeDoSomethingDifferentPromises> in
    self.handleResult(obj)
    self.doSomethingDifferent(obj)
}.catch { error in
    self.handleError(error)
}

或者你可以使用obj – >无效阻止链条

相关文章

Swift 正式开源!Swift 团队很高兴宣布 Swift 开始开源新篇章。自从苹果发布 Swfit 编程语言,就成为了...
快,快,快!动动您的小手,分享给更多朋友! 苹果去年推出了全新的编程语言Swift,试图让iOS开发更简单...
开发者(KaiFaX) 面向开发者、程序员的专业平台! 和今年年初承诺的一样,苹果贴出了Swift语言的源码,...
本文由@Chun发表于Chun Tips :http://chun.tips/blog/2014/12/11/shi-yong-swift-gou-jian-zi-ding-yi...
本文由CocoaChina译者leon(社区ID)翻译 原文:THE RIGHT WAY TO WRITE A SINGLETON 在之前的帖子里聊过...
本文由CocoaChina译者leon(社区ID)翻译 原文:THE RIGHT WAY TO WRITE A SINGLETON 在之前的帖子里聊过...