【发布时间】:2016-04-29 22:45:06
【问题描述】:
我正在用 Objective-C 编写一个 OS X/iOS 框架,我希望该框架对使用 Objective-C 或 Swift 的开发人员有用。
在普通的 Objective-C 中枚举是这样定义的(这个例子直接取自Apple's own UIView class reference)。
typedef enum {
UIViewAnimationCurveEaseInOut,
UIViewAnimationCurveEaseIn,
UIViewAnimationCurveEaseOut,
UIViewAnimationCurveLinear
} UIViewAnimationCurve;
为了使这个枚举对 Swift 友好,我的理解是它应该这样声明。
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
UIViewAnimationCurve_EaseInOut,
UIViewAnimationCurve_EaseIn,
UIViewAnimationCurve_EaseOut,
UIViewAnimationCurve_Linear
};
这允许从 Swift 以 let curve: UIViewAnimationCurve = .EaseInOut 的样式访问枚举。
我的问题是 NS_ENUM 和下划线方法在 Objective-C 中使用时会产生奇怪命名的枚举。 NS_ENUM 方法允许在 Swift 中使用点表示法,但这也意味着任何 ObjC 代码都需要在枚举名称中使用下划线,这是不可取的。
如何在 ObjC 代码中保留 Objective-C 风格的命名约定的同时允许 Swift 使用点表示法?
【问题讨论】:
标签: objective-c swift enums naming-conventions cross-language