2015-01-26 70 views
0

我想循环使用最初在Objective-C中使用Swift定义的enum循环播放Swift中的Objective-C枚举?

Objective-C的定义现在如下:

typedef NS_ENUM(NSInteger, Enum) { A, B, C }; 

如果我尝试for e in Enum我从斯威夫特编译此错误信息(在Xcode 6.1.1):

Type 'Enum.Type' does not conform to protocol Sequence.Type 

什么不见了?如果可能的话,我怎样才能让这个枚举表现为一个序列?

回答

2

在C中,并因此在Objective-C,enum s的定义为具有这样的行为:

如果第一枚举没有=,其枚举 常数的值是0的每个后续枚举no =将 枚举常量定义为通过将前一个枚举常量的值加1得到的常量表达式的值 。

所以你的情况,你可以这样做:

for enumerationValue in A...C 

如果enum更复杂,那么你需要做更复杂的东西。 C不一般提供任何东西的反省,包括枚举,所以如果它更像是:

typedef NS_ENUM(NSInteger, Enum) { A, B = 26, C, D = -9 }; 

那么你很可能接近不必创建A,B,C和d的文字排列,并列举通过这一点。

+0

但显然Swift允许以我试过的方式循环一些枚举(参见[这里](http://stackoverflow.com/questions/24007461/how-to-enumerate-an-enum-with-string-type) )。所以你说没有(直截了当)的方式来实现这与基于Objective-C的枚举,对吧?另外,我在'A ... C'中为'e解析了标识符A',而'ClosedInterval 没有名为'Generator'的成员用于'for。in ... .C'。 – Drux 2015-01-26 20:31:06

+0

这是迄今为止我已经能够实现的最好的基于你的输入:'为eAsInt in Enum.A.rawValue .. Drux 2015-01-26 21:10:46

+1

请注意,在你引用的问题中,他们实际上定义了一个数组'allValues',它包含所有可能值的显式列表,然后遍历'Enum.allValues',它实质上是@ tommy的最后一段答案建议。 – 2015-01-26 21:51:06