我在Objective-C代码中使用Swift类存在一个持续存在的问题:
Swift类如下所示:
@objc class TestClass {
private (set) var key: UInt64
private (set) var dict: [UInt64 : Double]! = [:]
init(key: UInt64, value: Double) {
self.key = key
self.dict[key] = value
}
}
当我尝试在Objective-C中使用test.dict
时,编译器(在Xcode 6.1.1中)标记错误Property 'dict' not found on object of type 'TestClass'
。
奇怪的是,生成的MyProject-Swift.h
引用key
但不引用dict
。以下是相关摘录:
@interface TestClass
@property (nonatomic, readonly) uint64_t key;
- (instancetype)initWithKey:(uint64_t)key value:(double)value OBJC_DESIGNATED_INITIALIZER;
@end
旧版本(我在dict
之后添加了key
)也是如此,但不再反映Swift中的定义。但是,如果我在private (set) var key2: UInt64
中添加属性MyProject-Swift.h
,则问题似乎与构建步骤的顺序无关。清理和重建项目没有帮助(重启Xcode也没有帮助。)
在这个实例中,我的代码和Objective-C与Swift之间的桥接有什么问题?可能是因为dict
被定义为Swift(不是Objective-C也不是@objc
)字典?如果是这样,我如何重构代码以取得进展。
答案 0 :(得分:2)
如果我没弄错,你的词典使用的格式不能与Objective-C相映射。
当您将Swift字典中的[...]转换为NSDictionary对象时 键和值必须是类的实例或可桥接到 一个班级的实例。
你需要一个声明:
private (set) var dict: [NSNumber: NSNumber]! = [:]
然后您的字典属性将出现在桥接标题中。