使用 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 AnyPromise
(PMKPromise
是 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
]
将 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 AnyPromise
(PMKPromise
是 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
]