Swift:'Int' 无法转换为 'ObjCBool'
Swift: 'Int' is not convertible to 'ObjCBool'
在我的代码中有一个惰性变量:
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
触发。在下面的回答中,您将看到问题的真正"root"。
列出的 Objective-C 文件不完整。一开始,有一个关键的枚举定义在我的 Swift 代码中使用该文件后立即中断了编译过程:
typedef NS_ENUM(BOOL, Stuff) {
StuffX = YES,
StuffY = NO
};
显然,Swift 不喜欢 BOOL
枚举。我不知道为什么,但是一旦我将 BOOL
转换为 Boolean
,错误就消失了。
在我的代码中有一个惰性变量:
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
触发。在下面的回答中,您将看到问题的真正"root"。
列出的 Objective-C 文件不完整。一开始,有一个关键的枚举定义在我的 Swift 代码中使用该文件后立即中断了编译过程:
typedef NS_ENUM(BOOL, Stuff) {
StuffX = YES,
StuffY = NO
};
显然,Swift 不喜欢 BOOL
枚举。我不知道为什么,但是一旦我将 BOOL
转换为 Boolean
,错误就消失了。