在我的代码中,我有一个惰性变量:
lazy var myService = {
return JSObjection.defaultInjector().getObject(MyService) as? MyService
}()
在同一个文件中,我尝试调用 myService
的函数:
func foo() {
myService?.getSomeStringsFrom(nil)
}
MyService 在 Objective-C 源文件中定义:
@interface MyService : NSObject
- (NSArray *) getSomeStringsFrom:(NSString *)aString;
@end
@implementation MyService
- (NSArray *) getSomeStringsFrom:(NSString *)aString {
return nil;
}
@end
代码无法编译,因为调用 getSomeStringsFrom(nil)
触发错误消息(两次):
<unknown>:0: error: 'Int' is not convertible to 'ObjCBool'
这没有意义 - 我正在对其他服务做同样的事情,并且 XCode 不会提示它。这是编译器错误吗?我正在使用 XCode 6.4 和 Swift 1.2。
编辑:在深入研究代码后,我发现错误消息也可以通过实例化 MyService
来触发。在下面的回答中,您将看到问题的真正“根源”。
最佳答案
列出的 Objective-C 文件不完整。一开始,有一个关键的枚举定义,一旦在我的 Swift 代码中使用该文件,就会破坏编译过程:
typedef NS_ENUM(BOOL, Stuff) {
StuffX = YES,
StuffY = NO
};
显然,当涉及到枚举时,Swift 不喜欢 BOOL
。我不知道为什么,但一旦我将 BOOL
转换为 Boolean
错误就消失了。
关于objective-c - Swift: 'Int' 无法转换为 'ObjCBool',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804827/