我如何将这个typedef枚举从目标c写入swift?

psh*_*rma 3 objective-c ios swift

下面,我有一个Objective-c代码用于火种风格的动画效果,灵感来自 - https://github.com/ngutman/TinderLikeAnimations/tree/master/TinderLikeAnimations.

Objective-C的

typedef NS_ENUM(NSUInteger , GGOverlayViewMode) {
    GGOverlayViewModeLeft,
    GGOverlayViewModeRight
};

- (void)setMode:(GGOverlayViewMode)mode
{
    if (_mode == mode) return;

    _mode = mode;
    if (mode == GGOverlayViewModeLeft) {
        self.imageView.image = [UIImage imageNamed:@"button1"];
    } else {
        self.imageView.image = [UIImage imageNamed:@"button2"];
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图在swift中复制相同的内容.这就是我在swift中所拥有的 -

enum GGOverlayViewMode : Int {
    case GGOverlayViewModeLeft
    case GGOverlayViewModeRight
}

    func setMode(mode: GGOverlayViewMode){
//        if (_ mode == mode) {
//            return
//        }
//
//        _mode = mode;

        if(mode == GGOverlayViewMode.GGOverlayViewModeLeft) {
            imageView.image = UIImage(named: "button1")
        } else {
            imageView.image = UIImage(named: "button2")
        }
    }
Run Code Online (Sandbox Code Playgroud)

但不知怎的,我在这里如何处理typdef没有意义.

任何帮助表示赞赏.

谢谢

Mar*_*n R 9

在Swift中,每个枚举都有自己的成员值,因此您不必像(Objective-)C那样为它们提供唯一的前缀.典型的定义是

enum GGOverlayViewMode  {
    case Left
    case Right
}
Run Code Online (Sandbox Code Playgroud)

此外,您不必指定基础"原始类型"(例如Int),除非您有其他理由这样做.

您将实现属性观察器,而不是自定义setter方法. didSet在存储新值后立即调用,并且具有oldValue包含旧属性值的隐式参数:

var mode : GGOverlayViewMode = .Right {
    didSet {
        if mode != oldValue {
            switch mode {
            case .Left : 
                imageView.image = UIImage(named: "button1")
            case .Right:
                imageView.image = UIImage(named: "button2")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)