2

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

目标C代码:

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

Swift 代码(我尝试了许多变体,但都没有工作。这个最接近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()
}

类似错误:“不能使用类型为 '((AnyObject?) -> AnyPromise)' 的参数列表调用 'then'”

4

1 回答 1

6

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

如果Foo.promise()打算在 ObjC 和 Swift 中使用,那么你做的是正确的事情。然而,如果你只打算在 Swift 中使用这个 Promise,那么我建议将它重写为Promise<T>.

要在 Swift 代码中使用 Objective-C AnyPromisePMKPromise不推荐使用AnyPromise: prefer的别名AnyPromise),您必须将其拼接到现有链中。

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

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

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

期待 2.1 更新。[编辑:2.1 推送了以上then内容]

于 2015-07-06T18:14:29.790 回答