【发布时间】:2023-03-05 00:16:01
【问题描述】:
我在 Objective-C 中有一个 typedef 定义,如下所示:
typedef NS_ENUM(NSInteger, MyStatus) {
MyStatusUnknown = -1,
MyStatusBad = 0,
MyStatusGood = 1
}
这个枚举在一个 pod 中,它被多个下游 pod 使用,应用程序是这样的:
@property (readonly, nonatomic, assign) MyStatus myStatus;
我需要将 typedef 的类转换为 Swift,而不更改下游 pod 中枚举定义的签名。
我先尝试了直接转换:
enum MyStatus: Int {
case unknown = -1
case bad
case good
}
但是这种情况下,上面的属性语句会报错:
接口类型不能静态分配
这个错误可以通过改变属性来解决
@property (readonly, nonatomic, assign) MyStatus *myStatus;
但正如我之前所说,我无法更改此属性定义。
那么如何将typedef 转换为 Swift,同时保持其与现有 Objective-C 属性的向后兼容性?
【问题讨论】:
-
你忘记添加
case关键字case unknown = -1, bad, good -
@LeoDabus 是的,谢谢,虽然这是一个错误,但不是在实际代码中(我简化了我转换为仅显示最小值的实际枚举)
-
这能回答你的问题吗? Is it possible to use Swift's Enum in Obj-C?
-
@Willeke 我没有问如何在 Objective C 中使用 Swift 枚举,我知道该怎么做。我问如何在将 Objective C typedef 转换为 Swift 枚举后保留静态分配的属性 - 完全不同的问题。
标签: objective-c swift