使用 PromiseKit 从 Objective C 桥接到 Swift

Bridging from Objective C to Swift with PromiseKit

将 PromiseKit 2.0 与 Swift 1.2 一起使用,我正在尝试使用在 Objective C 中从 Swift 创建的 PMKPromise。

Objective C代码:

@interface FooTest : NSObject
+ (PMKPromise *)promise;
@end

Swift 代码(我尝试了多种变体,none 其中有效。这个最接近 http://promisekit.org/PromiseKit-2.0-Released/ 给出的示例):

FooTest.promise().then { (obj: AnyObject?) in
    self.obj = obj
}

编译器错误:无法使用类型为“((AnyObject?) -> _)”的参数列表调用 'then'

这也不行:

FooTest.promise().then { (obj: AnyObject?) -> AnyPromise in
    return AnyPromise()
}

类似错误:"Cannot invoke 'then' with an argument list of type '((AnyObject?) -> AnyPromise)'"

PromiseKit 中有两种不同的 promise 类,一种用于 Swift (Promise<T>),一种用于 ObjC (AnyPromise)。 Swift 是通用的,Objective-C 看不到通用的 类,所以这就是为什么有两个。

如果 Foo.promise() 既要在 ObjC 中使用,又要在 Swift 中使用,那么您做对了。但是,如果您只打算在 Swift 中使用此承诺,那么我建议将其重写为 Promise<T>.

要在 Swift 代码中使用 Objective-C AnyPromisePMKPromiseAnyPromise 的弃用别名:更喜欢 AnyPromise)必须将其拼接到现有链中。

someSwiftPromise().then { _ -> AnyPromise in
    return someAnyPromise()
}.then { (obj: AnyObject?) -> Void in
    //…
}

应该 是一种从 AnyPromise 开始的方法,我可能会在今天晚些时候添加:

someAnyPromise().then { (obj: AnyObject?) -> Void in
    //…
}

期待 2.1 更新。 [编辑:2.1 推送并添加了上述 then]