枚举 - ShenYj/ShenYj.github.io GitHub Wiki
这是 OC 中最常用的枚举定义方式,将作为 enum
导入到 Swift 中
虽然你用 C 那种传统写法来定义枚举也是没问题的,但是在混编 Swift 时, 生成的 Swift 接口,当你在 Swift中使用时,只能使用原始的完整的枚举名称
用于声明不会变更枚举成员的简单的枚举(简称 “冻结枚举” ),对应 Swift 中的 @frozen
关键字,将作为 @frozen enum
导入到 Swift 中。
阅读 NS_CLOSED_ENUM 了解
用于声明选项枚举,也是很常见的, 将作为 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_ENUM
和NS_CLOSED_ENUM
枚举宏在导入到 Swift 时生成的是实际enum
类型,而其它枚举宏都是生成struct
类型。