Ios 如何将这个typedef枚举从objective c写入swift?
下面,我有objective-c代码,用于tinder风格的动画效果,灵感来自- 目标-cIos 如何将这个typedef枚举从objective c写入swift?,ios,objective-c,swift,Ios,Objective C,Swift,下面,我有objective-c代码,用于tinder风格的动画效果,灵感来自- 目标-c typedef NS_ENUM(NSUInteger , GGOverlayViewMode) { GGOverlayViewModeLeft, GGOverlayViewModeRight }; - (void)setMode:(GGOverlayViewMode)mode { if (_mode == mode) return; _mode = mode;
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中复制同样的内容。这就是我在斯威夫特的作品-
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")
}
}
但不知何故,我在这里如何处理typdefs是没有意义的
感谢您的帮助
谢谢,在Swift中,每个成员都有自己的成员值,因此您不必给出
它们是(Objective-)C中唯一的前缀。典型的定义是
enum GGOverlayViewMode {
case Left
case Right
}
此外,您不必指定底层的“原始类型”(例如Int
),除非
你有其他理由这样做
您将实现一个自定义setter方法,而不是自定义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")
}
}
}
}
我认为在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")
}
}
您不需要在swift中使用
typedef
enum
s;你只是像以前一样定义它们。我不确定我是否理解你的问题。你的实现看起来很完整。您不应该期望swift和obj-c关键字之间存在一对一的映射。知道了。多谢。