我想使用在目标C和Swift中都可见的枚举,但不符合RawRepresentable协议。
typedef NSString *myEnum NS_TYPED_ENUM;public struct myEnum : Hashable, Equatable, RawRepresentable { public init(rawValue: String) }我的问题是如何创建在Objc和Swift中可见但不符合该协议的enum?谢谢你的帮助!
发布于 2019-04-04 03:03:59
Swift语言增强 ..。现在可以使用@objc属性将Swift枚举导出到Objective。@objc枚举必须声明整数原始类型,并且不能是泛型或使用关联值。因为Objective枚举不是名称空间,所以枚举案例作为枚举名称和案例名称的连接导入到Objective中。
以上来自Xcode 6.4发行说明
为此,可以使用NS_TYPED_ENUM宏导入Swift中的常量,例如:.h文件。
typedef NSString *const ProgrammingLanguage NS_TYPED_ENUM;
FOUNDATION_EXPORT ProgrammingLanguage ProgrammingLanguageSwift;
FOUNDATION_EXPORT ProgrammingLanguage ProgrammingLanguageObjectiveC;.m文件
ProgrammingLanguage ProgrammingLanguageSwift = @"Swift";
ProgrammingLanguage ProgrammingLanguageObjectiveC = @"ObjectiveC";在Swift中,这是作为这样一个结构导入的:
struct ProgrammingLanguage: RawRepresentable, Equatable, Hashable {
typealias RawValue = String
init(rawValue: RawValue)
var rawValue: RawValue { get }
static var swift: ProgrammingLanguage { get }
static var objectiveC: ProgrammingLanguage { get }
}虽然该类型不是作为枚举桥接的,但在Swift代码中使用它时感觉非常类似。
您可以在与C API的“使用Swift与Cocoa和Objective文档交互”中了解更多有关此技术的内容。
https://stackoverflow.com/questions/55506853
复制相似问题