我想使用在目标C和Swift中都可见但不符合RawRpresentable协议的枚举。
我试图让Objc和Swift中都可见一个字符串枚举,因此我使用了
typedef NSString *myEnum NS_TYPED_ENUM;
我试图利用myEnum(rawValue:)-> myEnum?函数,但我发现enumType已自动符合
public struct myEnum : Hashable, Equatable, RawRepresentable {
public init(rawValue: String)
}
我的问题是如何创建在Objc和Swift中可见但不符合此协议的枚举?感谢您的所有帮助!
答案 0 :(得分:1)
快速语言增强
...现在可以使用@objc将Swift枚举导出到Objective-C 属性。 @objc枚举必须声明一个整数原始类型,并且不能为 通用或使用关联值。因为Objective-C枚举不是 命名空间,枚举案例作为 枚举名称和案例名称的串联。
为此,您在Objective-C中定义值,可以使用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交互”中阅读有关此技术的更多信息。