从 Swift 访问 Objective-C 结构

pbu*_*eit 5 struct constants objective-c swift

我正在开发一个混合了 swift 和 obj-c 代码的 ios 应用程序。我的 obj-c 模型类之一定义了一个包含字符串的结构,以帮助转换为字典并返回。我有桥接头设置,我可以在 swift 类中访问 Objective-C 类中定义的方法。我不知道如何访问静态结构来获取我的属性字符串。这是我的 .h 和 .m 文件的片段:

订单项.h

extern const struct OrderItemAttributes {
    __unsafe_unretained NSString *created;
    __unsafe_unretained NSString *created_by_id;
    __unsafe_unretained NSString *device_deleted;
} OrderItemAttributes;

@interface OrderItem : NSManagedObject {}
@property (nonatomic, strong) NSDate* created;
@end
Run Code Online (Sandbox Code Playgroud)

订单项.m

const struct OrderItemAttributes OrderItemAttributes = {
    .created = @"created",
    .created_by_id = @"created_by_id",
    .device_deleted = @"device_deleted",
};

@implementation OrderItem
@dynamic created;
@end
Run Code Online (Sandbox Code Playgroud)

我以为我可以简单地使用

OrderItem.OrderItemAttributes.created

访问属性字符串,但 swift 不接受该语法。有没有办法在不对我的 Objective-C 代码进行重大更改的情况下做我想做的事情?

Dar*_*ren 2

该变量OrderItemAttributes不是OrderItem命名空间的一部分。它将直接访问为:

var foo: NSString = OrderItemAttributes.created.takeUnretainedValue()
Run Code Online (Sandbox Code Playgroud)

您在自动完成中看到的问题是因为OrderItemAttributes不明确而发生的;它既是类型名称又是变量名称。对结构类型名称和全局变量使用不同的名称以避免歧义。例如,将“Struct”添加到类型名称的末尾:

extern const struct OrderItemAttributesStruct {
    __unsafe_unretained NSString *created;
    __unsafe_unretained NSString *created_by_id;
    __unsafe_unretained NSString *device_deleted;
} OrderItemAttributes;
Run Code Online (Sandbox Code Playgroud)