【问题标题】:Accessing objective-c Struct from Swift从 Swift 访问objective-c Struct
【发布时间】:2016-03-04 10:27:56
【问题描述】:

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

OrderItem.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

OrderItem.m

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

@implementation OrderItem
@dynamic created;
@end

我以为我可以简单地使用

OrderItem.OrderItemAttributes.created

访问属性字符串,但 swift 不接受该语法。有什么方法可以在不对我的 Objective-c 代码进行重大更改的情况下做我想做的事吗?

【问题讨论】:

标签: objective-c swift struct constants


【解决方案1】:

变量OrderItemAttributes 不属于OrderItem 命名空间。它将被直接访问为:

var foo: NSString = OrderItemAttributes.created.takeUnretainedValue()

出现自动完成问题是因为 OrderItemAttributes 不明确;它既是类型名称又是变量名称。为结构类型名称和全局变量使用不同的名称以避免歧义。例如,将 'Struct' 添加到类型名称的末尾:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多