下面,我有一个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是没有意义的。
感谢任何帮助。
由于
答案 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")
}
}