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

时间:2014-11-10 18:13:59

标签: ios objective-c swift

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

目标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"];
    }
}

我试图在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")
        }
    }

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

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:9)

在Swift中,每个enumeration都有自己的成员值,因此您无需提供 它们是(Objective-)C中的唯一前缀。典型的定义是

enum GGOverlayViewMode  {
    case Left
    case Right
}

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

而不是自定义setter方法,您将实现property observer。 在存储新值之后立即调用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")
            }
        }
    }
}

答案 1 :(得分:2)

我认为在swift中,你的功能看起来像这样。

enum GGOverlayViewMode : Int 
{
case GGOverlayViewModeLeft
case GGOverlayViewModeRight
}

func setMode(mode: GGOverlayViewMode){
switch mode
{
  case .GGOverlayViewModeLeft:
  imageView.image = UIImage(named: "button1")
  case .GGOverlayViewModeRight:
  imageView.image = UIImage(named: "button2")
}
}