首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在Obj-C中使用Swift的Enum?

是否可以在Obj-C中使用Swift的Enum?
EN

Stack Overflow用户
提问于 2014-06-10 19:00:13
回答 9查看 82.8K关注 0票数 164

我正在尝试将我的一些Obj-C类转换为Swift。其他一些Obj-C类在转换后的类中仍在使用枚举。我搜索了预发布文档,但没有找到它,或者我错过了它。有没有办法在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
{
    ...
}

更新:答案中的。它不能在早于1.2的Swift版本中完成。但是根据这个官方的Swift Blog。在与XCode 6.3一起发布的Swift 1.2中,您可以通过在enum前面添加@objc来在Objective-C中使用Swift枚举

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-02-11 00:02:42

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

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

厚颜无耻地取自Swift Blog

注意:这不适用于字符串枚举或具有关联值的枚举。您的枚举需要是Int绑定的

在Objective-C中,这看起来像这样

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

Stack Overflow用户

发布于 2014-10-10 01:03:14

要对所选答案进行扩展...

可以使用NS_ENUM()在Swift和Objective-C之间共享Swift风格的枚举。

它们只需要使用NS_ENUM()在Objective-C上下文中定义,并使用Swift点表示法提供。

Using Swift with Cocoa and Objective-C

Swift将使用NS_ENUM宏标记的任何C样式枚举作为Swift枚举导入。这意味着枚举值名称的前缀在导入Swift时会被截断,无论它们是在系统框架中定义的还是在自定义代码中定义的。

Objective-C

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
   UITableViewCellStyleDefault,
   UITableViewCellStyleValue1,
   UITableViewCellStyleValue2,
   UITableViewCellStyleSubtitle
};

斯威夫特

let cellStyle: UITableViewCellStyle = .Default
票数 32
EN

Stack Overflow用户

发布于 2014-06-10 19:11:27

来自Using Swift with Cocoa and Objective-C指南:

必须使用@objc属性标记Swift类或协议,才能在Objective-C中访问和使用。..。

只要类或协议与Objective-C兼容,您就可以访问用@objc属性标记的类或协议中的任何内容。这不包括仅适用于Swift的功能,如以下列出的功能:

泛型元组/枚举在Swift中定义/结构在Swift中定义/顶级函数在Swift中定义/全局变量在Swift中定义/类型别名在Swift /Swift样式变量中定义/嵌套类型/ Curried函数

所以,不能在Objective-C类中使用Swift枚举。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24139320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档