他们有这段代码来定义颜色枚举的其他未定义状态
#define AAPLListColorUndefined ((AAPLListColor)-1)
...
#undef AAPLListColorUndefined
但是为什么不将它们添加到定义其他颜色的类中呢?
typedef NS_ENUM(NSInteger, AAPLListColor) {
AAPLListColorGray = 0,
AAPLListColorBlue,
AAPLListColorGreen,
AAPLListColorYellow,
AAPLListColorOrange,
AAPLListColorRed
};
这背后有原因吗?或只是个人风格而没有任何好处。
请注意,该属性仅在声明的文件中AAPLListColorUndefined
使用(甚至在该文件的末尾特别未定义。)基本上,它是一个仅在该类中使用的帮助程序值(以跟踪是否设置了颜色)。其他值,仅在该类中有用。因此,这是设计原因之一:它实际上不是颜色值;它基本上只是该特定类中使用的标志。
第二个原因是编译器将检查switch
语句中NS_ENUM值的完整性。尝试将AAPLListColorUndefined添加到枚举本身中,现在您将看到switch
类似以下语句的编译器警告:
// Warning: Enumeration value 'AAPLListColorUndefined' not handled in switch
switch (listColor) {
case AAPLListColorGray: return _grayColor;
case AAPLListColorBlue: return _blueColor;
case AAPLListColorGreen: return _greenColor;
case AAPLListColorYellow: return _yellowColor;
case AAPLListColorOrange: return _orangeColor;
case AAPLListColorRed: return _redColor;
}
...因为编译器可以看到未定义的值未被处理。由于价值只能被在一个特定的类不确定的,这是有道理不把它在NS_ENUM为其他类可用,因为这将迫使你处理一下,当你知道你的颜色值,不能在逻辑上可以”永远不会在它们中被定义。(在其他文件中,使用默认的灰色,因此不需要“未定义”的值,而是始终定义了颜色。)
因此,这就是设计原因的“另一面”:它不仅在定义的一个文件中有用,而且在不使用的文件中特别有用。
我会说这是非常整洁的代码。如果要将未定义的颜色添加为枚举的一部分,那么即使在只使用了一个不执行任何操作的情况下,或者在您知道该错误的情况下,您都需要在使用该枚举的每个switch语句中进行一些操作default:
永远不会发生。
或者,您可以AAPLListInfo.m
像其他文件一样,通过将color属性设置为默认值(例如灰色)来完全不使用未定义的值,但是您将需要一个额外的标志(可能是布尔值)来指示是否列表信息已获取。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句