我有一个委托方法,它将枚举作为参数传递:
func gestureRecognizer(gestureRecognizer: JTTableViewGestureRecognizer!, commitEditingState state: JTTableViewCellEditingState, forRowAtIndexPath indexPath: NSIndexPath!) -> Void {
//....
}
枚举是 JTTableViewCellEditState。它的实现与委托方法位于同一头文件中。具体如下:
typedef enum {
JTTableViewCellEditingStateMiddle,
JTTableViewCellEditingStateLeft,
JTTableViewCellEditingStateRight,
} JTTableViewCellEditingState;
然而,尝试引用一个状态,例如 Left,会给出一个错误:
if state == JTTableViewCellEditingState.Left {
"JTTableViewCellEditState.Type"没有名为"Left"的成员
试图用旧的Objective-C方式来做这件事,就像某种农民一样,给了我一个不同的,更意想不到的错误:
if state == JTTableViewCellEditingStateLeft {
无法使用类型为"(JTTableViewCellEditState, JTTableViewCellEditState, JTTableViewCellEditState)"的参数列表调用"=="
我想知道如何克服这个问题?我相信引用 Objective-C 枚举在过去效果很好。
枚举降级会导致 swift 出现问题。我也有类似的问题。我的解决方案是创建一个辅助程序 objective-c 方法,该方法进行比较并在需要 == 时在 swift 中使用该方法。
如果可以的话,其他解决方案可能是重构该代码,并在 objective-c 中将其转换为适当的枚举降级。
typedef NS_ENUM(NSInteger, MyEnum) {
MyEnumValue1,
MyEnumValue2
};
你可以改用NS_ENUM
吗?然后尝试JTTableViewCellEditingState.JTTableViewCellEditingStateLeft
甚至.JTTableViewCellEditingStateLeft
访问您的枚举。如果您无法将其更改为 NS_ENUM
,请查看在 swift
在我的环境中 - Xcode 版本 6.1.1 (6A2006):
typedef enum {
JTTableViewCellEditingStateMiddle,
JTTableViewCellEditingStateLeft,
JTTableViewCellEditingStateRight,
} JTTableViewCellEditingState;
导出到 Swift 时为:
struct JTTableViewCellEditingState {
init(_ value: UInt32)
var value: UInt32
}
var JTTableViewCellEditingStateMiddle: JTTableViewCellEditingState { get }
var JTTableViewCellEditingStateLeft: JTTableViewCellEditingState { get }
var JTTableViewCellEditingStateRight: JTTableViewCellEditingState { get }
所以,这应该有效:
func gestureRecognizer(gestureRecognizer: JTTableViewGestureRecognizer!, commitEditingState state: JTTableViewCellEditingState, forRowAtIndexPath indexPath: NSIndexPath!) -> Void {
if state.value == JTTableViewCellEditingStateLeft.value {
// ...
}
}