对象可见的字符串枚举,但不是RawRepresentable

时间:2019-04-04 02:11:11

标签: objective-c swift enums rawrepresentable

我想使用在目标C和Swift中都可见但不符合RawRpresentable协议的枚举。

  1. 我试图让Objc和Swift中都可见一个字符串枚举,因此我使用了

    typedef NSString *myEnum NS_TYPED_ENUM;

  2. 我试图利用myEnum(rawValue:)-> myEnum?函数,但我发现enumType已自动符合

    public struct myEnum : Hashable, Equatable, RawRepresentable { public init(rawValue: String) }

我的问题是如何创建在Objc和Swift中可见但不符合此协议的枚举?感谢您的所有帮助!

1 个答案:

答案 0 :(得分:1)

  

快速语言增强

     

...现在可以使用@objc将Swift枚举导出到Objective-C   属性。 @objc枚举必须声明一个整数原始类型,并且不能为   通用或使用关联值。因为Objective-C枚举不是   命名空间,枚举案例作为   枚举名称和案例名称的串联。

Xcode 6.4 Release Notes


为此,您在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代码中使用该类型非常相似。

您可以在Using Swift with Cocoa and Objective-C documentation

的“ 与C API交互”中阅读有关此技术的更多信息。