Swift:'Int'不能转换为'ObjCBool​​'

时间:2015-08-04 08:55:28

标签: objective-c swift compiler-errors compiler-bug xcode6.4

在我的代码中,我有一个懒惰的var:

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来触发。在下面的答案中,您将看到问题的真正“根”。

1 个答案:

答案 0 :(得分:1)

列出的Objective-C文件不完整。一开始,有一个关键的枚举定义在我的Swift代码中使用文件后立即打破了编译过程:

typedef NS_ENUM(BOOL, Stuff) {
    StuffX = YES,
    StuffY = NO
}; 

显然,当涉及枚举时,斯威夫特不喜欢BOOL。我不知道为什么,但只要我将BOOL转换为Boolean,错误就会消失。