在Swift中使用Objective-C枚举

8

我在一个Objective-C文件中有以下枚举:

typedef NS_ENUM(NSInteger, countDirection){
    countDirectionUp = 0,
    countDirectionDown
};

我该如何在Swift视图控制器中使用这个?我尝试过以下方法:

label.countDirection = countDirection.countDirectionDown

我遇到了一个错误:

countDirection.Type没有名为countDirectionDown的成员


应该写成label.countDirection = countDirection.Down或者只写成label.countDirection = .Down - Martin R
@7stud:对我来说它是有效的。但是你是如何定义“label”的? - Martin R
@7stud:对我来说,var foo: countDirection; foo = .Down 可以编译通过。 - Martin R
@MartinR,您使用的Xcode版本是哪个? - 7stud
@7stud:使用Xcode 6.4(当前版本)和Xcode 7 beta进行了测试。 - Martin R
显示剩余7条评论
2个回答

18

这些会被翻译成

countDirection.Up
countDirection.Count

Swift尽可能删除枚举值与枚举名称相同的部分。在您的情况下,如果有一个名为countDirection的枚举和一个值countDirectionUp,那么整个“countDirection”将被删除。这是不必要的,因为您知道正在使用哪个枚举,可以使您的代码更加简短。


非常感谢! - Jignesh
1
在Swift 4中,Swift还将使每个枚举项的第一个字符小写。因此,在上面的代码示例中,它将是countDirection.up,例如。 - Bruno Philipe
拯救了我的生命。谢谢你。 - GranolaGuy

2

使用桥接头文件和您的枚举值,我得到与您相同的错误。但是,如果我将枚举值更改为:

typedef NS_ENUM(NSInteger, countDirection) {
    cdUp = 0,
    cdDown

};

如果我不使用以类型名称开头的枚举值,则不会出现任何错误。由于某些原因,Swift 不喜欢以类型名称开头的枚举值。

这些枚举值也没有错误:

typedef NS_ENUM(NSInteger, countDirection) {
    CountDirectioUp = 0,
    CountDirectionDown
};

4
“Swift不喜欢以类型名称开头的枚举值”——不,这是错误的。Swift实际上喜欢这样的枚举值,并以优化的方式导入它们。请看《使用Swift与Cocoa和Objective-C》中的“枚举”部分。Foundation框架中的大多数枚举定义都使用了这种模式。 - Martin R
Swift使用非常有用的系统来缩写枚举值,而您却在努力反对它。难怪您没有得到好的结果。 - gnasher729

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接