Swift类中Dictionary类型的属性对Objective-C类不可见

时间:2015-01-24 15:57:52

标签: objective-c xcode swift dictionary xcode6

我在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)字典?如果是这样,我如何重构代码以取得进展。

1 个答案:

答案 0 :(得分:2)

如果我没弄错,你的词典使用的格式不能与Objective-C相映射。

documentation说:

  

当您将Swift字典中的[...]转换为NSDictionary对象时   键和值必须是类的实例或可桥接到   一个班级的实例。

你需要一个声明:

private (set) var dict: [NSNumber: NSNumber]! = [:]

然后您的字典属性将出现在桥接标题中。