我有一个委托方法,它将枚举作为参数传递:
func gestureRecognizer(gestureRecognizer: JTTableViewGestureRecognizer!, commitEditingState state: JTTableViewCellEditingState, forRowAtIndexPath indexPath: NSIndexPath!) -> Void {
//....
}
枚举是JTTableViewCellEditingState。它的实现与委托方法在同一个头文件中。它如下:
typedef enum {
JTTableViewCellEditingStateMiddle,
JTTableViewCellEditingStateLeft,
JTTableViewCellEditingStateRight,
} JTTableViewCellEditingState;
然而,试图引用一个状态,例如Left,会出错:
if state == JTTableViewCellEditingState.Left {
'JTTableViewCellEditingState.Type'没有名为'Left'的成员
尝试使用旧的Objective-C方式,就像某种农民一样,给了我一个不同的,更期望的错误:
if state == JTTableViewCellEditingStateLeft {
无法使用类型'(JTTableViewCellEditingState,JTTableViewCellEditingState)'的参数列表调用'=='
我想知道如何克服这个问题?我相信引用Objective-C枚举在过去运作得很好。
答案 0 :(得分:3)
这种类型的enum decleration会迅速引发问题。我有类似的问题。我的解决方案是创建一个helper objective-c方法,在需要==时进行比较并在swift中使用该方法。
如果可以的话,其他解决方案可能会重构该代码并在objective-c中将其转换为正确的枚举。
typedef NS_ENUM(NSInteger, MyEnum) {
MyEnumValue1,
MyEnumValue2
}
答案 1 :(得分:2)
您可以使用NS_ENUM
吗?然后尝试JTTableViewCellEditingState.JTTableViewCellEditingStateLeft
甚至.JTTableViewCellEditingStateLeft
来访问您的枚举。如果您无法将其更改为NS_ENUM
,请查看Using non NS_ENUM objective-C enum in swift
答案 2 :(得分:2)
在我的环境中 - Xcode Version 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 {
// ...
}
}