objective-c - Swift: 'Int' 无法转换为 'ObjCBool'

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

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

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/

相关文章:

ios - Interface Builder 不显示 segues 的 peek 和 pop 选项

c# - C#编译错误: “The name does not exist in the current context”

ios - 在屏幕截图 iOS 中保持透明度

Objective-c 悬停时为 NSTextField 标签下划线

objective-c - SOAP WebService objective-c

xcode - 图像.xcassets : error: ERROR: Each TDDistiller instance can be distilled only one time

c++ - 为什么 g++ 在编译时给我冲突错误?

objective-c - 为什么断言不是NSFetchRequest的属性?

swift - 键盘问题上方的文本字段

swift - SpriteKit 的界面生成器