将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)的参数列表'"
答案 0 :(得分:5)
PromiseKit中有两个不同的promise类,一个用于Swift(Promise<T>
),另一个用于ObjC(AnyPromise
)。 Swift是通用的,Objective-C看不到泛型类,所以这就是为什么有两个。
如果要在ObjC和Swift中使用Foo.promise()
那么你就是在做正确的事情。但是,如果您只打算在Swift中使用此承诺,那么我建议将其重写为Promise<T>
。
在Swift代码中使用Objective-C AnyPromise
(PMKPromise
是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
]