我正在try 将我的一些Obj-C类转换为Swift.其他一些Obj-C类仍然在转换后的类中使用enum.我在发布前的文档中搜索了一下,但找不到,或者可能是找不到了.有没有办法在Obj-C类中使用Swift枚举?或者这个问题的文档链接?

这就是我在旧Obj-C代码和新Swift代码中声明枚举的方式.

我的旧Obj-C代码:

typedef NS_ENUM(NSInteger, SomeEnum)
{
    SomeEnumA,
    SomeEnumB,
    SomeEnumC
};

@interface SomeClass : NSObject

...

@end

我的新Swift代码:

enum SomeEnum: NSInteger
{
    case A
    case B
    case C
};

class SomeClass: NSObject
{
    ...
}

答案是Update:.不能在比1.2旧的Swift版本中完成.但根据这名官员的说法.在随XCode 6.3发布的Swift 1.2中,您可以在Objective-C中使用Swift Enum,方法是在enum前面添加@objc

推荐答案

从Swift版本1.2(Xcode 6.3)开始,您可以.只需在enum声明前面加上@objc

@objc enum Bear: Int {
    case Black, Grizzly, Polar
}

无耻地从Swift Blog人中夺走

注意:这不适用于字符串枚举或具有关联值的枚举.您的枚举将需要整数绑定


在Objective-C中,这看起来像

Bear type = BearBlack;
switch (type) {
    case BearBlack:
    case BearGrizzly:
    case BearPolar:
       [self runLikeHell];
}

Swift相关问答推荐

如何使用Swift宏向 struct 体及其init函数添加新成员?

如何为任务扩展的泛型静态函数获得自动类型推理

Swift C外部实现的Task / Future类类型

是否在核心数据中使用Uint?

出错-无法将季节类型的值转换为预期的参数类型';[水果]';

SwiftData/PersistentModel.swft:540:致命错误:不支持的关系密钥路径ReferenceWritableKeyPath

是否可以使用一个 NSRegularExpression 同时判断字符串格式并提取子字符串?

Swift iOS:确定贝塞尔曲线路径是否与 UIView 框架相交?

本地对象的异步/等待引用捕获总是安全的还是理论上不安全?

如何在闭包中使用构造 await sync

将 Encodable 扩展添加到 Swift 嵌套枚举

将基于MyProtocol的泛型函数的参数更改为使用存在的any MyProtocol或some MyProtocol是否会受到惩罚?

SwiftUI:调用以编程方式创建的视图的函数

试图同时实现两个混合过渡

AVPlayer 在 iOS 15.4 中寻求 completionHandler 返回 false

自动布局:获取 UIImageView 高度以正确计算单元格高度

自定义 MKAnnotation 标注视图?

如何在 SwiftUI 中以编程方式滚动列表?

Swift中方法的弃用和其他属性,如何?

如何在 SwiftUI 中的一个视图上显示两个alert ?