我正在用 Objective-C 编写一个 OS X/iOS 框架,我希望该框架对使用 Objective-C 或 Swift 的开发人员有用。
在普通的 Objective-C 中,枚举是这样定义的(这个例子直接取自Apple 自己的 UIView 类参考)。
typedef enum {
UIViewAnimationCurveEaseInOut,
UIViewAnimationCurveEaseIn,
UIViewAnimationCurveEaseOut,
UIViewAnimationCurveLinear
} UIViewAnimationCurve;
为了使这个枚举对 Swift 友好,我的理解是它应该这样声明。
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
UIViewAnimationCurve_EaseInOut,
UIViewAnimationCurve_EaseIn,
UIViewAnimationCurve_EaseOut,
UIViewAnimationCurve_Linear
};
let curve: UIViewAnimationCurve = .EaseInOut
这允许以Swift的样式访问枚举。
我的问题是NS_ENUM
and underscore 方法在从 Objective-C 中使用时会产生奇怪命名的枚举。该NS_ENUM
方法允许在 Swift 中使用点表示法,但这也意味着任何 ObjC 代码都需要在枚举名称中使用下划线,这是不可取的。
如何在 ObjC 代码中保留 Objective-C 样式命名约定的同时允许 Swift 的点表示法?