在Swift中使用类型时如何排除C枚举

时间:2019-01-25 02:53:10

标签: c swift enums

在我的C代码中,通常会有一个枚举大小写,其末尾称为count。但是当我在Swift中使用枚举时,它也将具有该值,我必须在switch语句中处理该值。

在导入Swift时是否可以使用某些属性来排除大小写?

1 个答案:

答案 0 :(得分:4)

您可以在枚举器上使用NS_SWIFT_UNAVAILABLE宏:

typedef NS_ENUM(unsigned, Foo) {
    bar,
    baz,
    count NS_SWIFT_UNAVAILABLE("Count does not represent a case")
};

NS_SWIFT_UNAVAILABLE与要应用于枚举器的任何__attribute__一样,在枚举器名称之后但在=之前(如果需要)。

如果包含<Foundation/Foundation.h>,则定义宏。如果包含CoreFoundation,您将得到CF_SWIFT_UNAVAILABLE,其作用相同。如果您都不输入,则可以使用长格式:

__attribute__((availability(swift, unavailable, message="your message")))
带有NS_SWIFT_UNAVAILABLE注释的

枚举数不会显示在自动完成中,并且如果未在Swift端进行处理,也不会引起构建问题。如果尝试使用它,则会收到包含您的消息的硬错误。

请记住,从Swift 5开始,如果您的目的是避免出现NS_ENUM情况,则可能需要使用NS_CLOSED_ENUM而不是default