繁体   English   中英

使用PromiseKit从Objective C桥接到Swift

[英]Bridging from Objective C to Swift with 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?)-> _)'的参数列表调用'then'

这也不起作用:

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

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

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

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

要使用Objective-C的AnyPromisePMKPromise是一个过时的别名AnyPromise :喜欢AnyPromise )在银行代码必须拼接成一个已有链。

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

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

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

期待2.1更新。 [编辑:2.1以上添加, then添加]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM