使用这些枚举..。
typedef enum {
ThisThingA = 0,
ThisThingB = 1
} ThisThing;
typedef enum {
ThatThingX = 8,
ThatThingY = 9
} ThatThing;这些属性..。
@property (nonatomic) ThisThing thisThing;
@property (nonatomic) ThatThing thatThing;我能做到..。
self.thisThing = thatThingX;而且我没有收到编译器的警告,这是我所期望的。为什么编译器没有警告?为什么我可以将类型为ThatThing的对象赋给类型为ThisThing的对象?
根据Martin R的回答进行编辑:但如果我这样做...
[self setThisThing:thatThingX];我收到警告:从枚举类型'ThatThing‘到不同枚举类型'ThisThing’的隐式转换
(Xcode4.6.3和iOS 6.0)
发布于 2013-06-28 15:05:01
枚举是一个整数类型的C结构。它是类型检查的。您的用法是相同的默认整数类型,所以在编译器看来没有任何问题,或者根本没有问题。您的用法是int。
如果将int键入为Bob,再键入为Josephine,这对代码清晰度很方便。Bob和Josephine仍然是同一类型的int。
如果您声明了两个枚举,但一个使用NSUInteger,另一个使用NSInteger,您可能会收到一条警告,具体取决于您的隐式转换设置。
这确实是一个C级问题。
发布于 2013-06-28 14:56:14
实际上,枚举选项被视为NSInteger。因此,默认情况下thatThingX的值为0。当你赋值self.thisThing = thatThingX;时,self.thisThing的值为0。因此,它将成为ThisThingA。这就是为什么没有警告的原因。
https://stackoverflow.com/questions/17358863
复制相似问题