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

Mic*_*sky 5 c enums swift

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

导入 Swift 时是否可以使用某些属性来排除情况?

zne*_*eak 5

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

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

NS_SWIFT_UNAVAILABLE__attribute__您想要应用于枚举器的任何名称一样,位于枚举器名称之后,但位于如果=您需要的话之前。

如果包含 则定义了宏<Foundation/Foundation.h>。如果包含 CoreFoundation,则会得到CF_SWIFT_UNAVAILABLE,它会执行相同的操作。如果两者都不包含,则可以使用长形式:

__attribute__((availability(swift, unavailable, message="your message")))
Run Code Online (Sandbox Code Playgroud)

带注释的枚举器NS_SWIFT_UNAVAILABLE不会显示在自动完成中,并且如果不在 Swift 端处理它们也不会导致构建问题。如果您尝试使用它,您会收到包含您的消息的硬错误。

请记住,从 Swift 5 开始,如果您的目的是避免出现问题,您可能需要使用NS_CLOSED_ENUM而不是。NS_ENUMdefault