0

在我的代码中,我有一个惰性变量:

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

4

1 回答 1

1

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

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

显然,Swift 不喜欢BOOL枚举。我不知道为什么,但是一旦我转换BOOLBoolean错误就消失了。

于 2015-08-04T13:59:56.400 回答