使用PromiseKit将目标C桥接到Swift

时间:2015-07-05 16:39:45

标签: objective-c swift promisekit

将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?) - > _)'

的参数列表

这不起作用:

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

类似的错误:"无法调用'然后'使用类型'((AnyObject?) - > AnyPromise)的参数列表'"

1 个答案:

答案 0 :(得分:5)

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

如果要在ObjC和Swift中使用Foo.promise()那么你就是在做正确的事情。但是,如果您只打算在Swift中使用此承诺,那么我建议将其重写为Promise<T>

在Swift代码中使用Objective-C AnyPromisePMKPromiseAnyPromise的弃用别名: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]