我正在尝试将我的一些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枚举
发布于 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];
}
发布于 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
发布于 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枚举。
https://stackoverflow.com/questions/24139320
复制相似问题