我想使用在目标C和Swift中都可见但不符合协议RawRepresentable的枚举。
-
我试图在 Objc 和 Swift 中都有一个可见的字符串枚举,因此我使用
typedef NSString *myEnum NS_TYPED_ENUM;
-
我试图利用 myEnum(rawValue: ( -> myEnum? 函数,但我发现 enumType 已自动符合
public struct myEnum : Hashable, Equatable, RawRepresentable { public init(rawValue: String) }
我的问题是如何创建在 Objc 和 Swift 中可见但不符合此协议的枚举?感谢所有的帮助!
快速语言增强
。Swift 枚举现在可以使用 @objc 导出到 Objective-C属性。@objc枚举必须声明整数原始类型,并且不能泛型或使用关联值。因为 Objective-C 枚举不是命名空间的枚举案例被导入到 Objective-C 中,作为枚举名称和案例名称的串联。
以上来自 Xcode 6.4 发行说明
<小时 />为此,您在 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 代码中使用它时感觉与枚举非常相似。
您可以在使用 Swift with Cocoa 和 Objective-C 文档的">与 C API 交互"中阅读有关此技术的更多信息