在我的代码中,我有一个懒惰的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
来触发。在下面的答案中,您将看到问题的真正“根”。
答案 0 :(得分:1)
列出的Objective-C文件不完整。一开始,有一个关键的枚举定义在我的Swift代码中使用文件后立即打破了编译过程:
typedef NS_ENUM(BOOL, Stuff) {
StuffX = YES,
StuffY = NO
};
显然,当涉及枚举时,斯威夫特不喜欢BOOL
。我不知道为什么,但只要我将BOOL
转换为Boolean
,错误就会消失。