枚举 - ShenYj/ShenYj.github.io GitHub Wiki

枚举

NS_ENUM

这是 OC 中最常用的枚举定义方式,将作为 enum 导入到 Swift 中

虽然你用 C 那种传统写法来定义枚举也是没问题的,但是在混编 Swift 时, 生成的 Swift 接口,当你在 Swift中使用时,只能使用原始的完整的枚举名称

NS_CLOSED_ENUM

用于声明不会变更枚举成员的简单的枚举(简称 “冻结枚举” ),对应 Swift 中的 @frozen 关键字,将作为 @frozen enum 导入到 Swift 中。

阅读 NS_CLOSED_ENUM 了解

NS_OPTIONS

用于声明选项枚举,也是很常见的, 将作为 struct 导入到 Swift 中

// Declare in Objective-C
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};

// In Swift, the UIViewAutoresizing type is imported like this:
public struct UIViewAutoresizing: OptionSet {
    public init(rawValue: UInt)
    
    public static var flexibleLeftMargin: UIViewAutoresizing { get }
    public static var flexibleWidth: UIViewAutoresizing { get }
    public static var flexibleRightMargin: UIViewAutoresizing { get }
    public static var flexibleTopMargin: UIViewAutoresizing { get }
    public static var flexibleHeight: UIViewAutoresizing { get }
    public static var flexibleBottomMargin: UIViewAutoresizing { get }
}

// Use it in Swift
let style = UIViewAutoresizing([.flexibleWidth, .flexibleHeight])

使用 NS_ENUMNS_CLOSED_ENUM 枚举宏在导入到 Swift 时生成的是实际 enum 类型,而其它枚举宏都是生成 struct 类型。

⚠️ **GitHub.com Fallback** ⚠️