在我的 C 代码中,我通常在末尾有一个名为 count 的枚举情况。但是当我在 Swift 中使用枚举时,它也将具有该值,我必须在 switch 语句中处理该值。
导入 Swift 时是否可以使用某些属性来排除情况?
您可以在枚举器上使用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