每个
typedef enum
的值是否被视为int
类型?例如,给定以下
typedef enum
:// UIView.h typedef enum { UIViewAnimationCurveEaseInOut, UIViewAnimationCurveEaseIn, UIViewAnimationCurveEaseOut, UIViewAnimationCurveLinear } UIViewAnimationCurve;
我该如何知道在创建
NSNumber
时使用哪种方法?+ (NSNumber *)numberWithShort:(short)value; + (NSNumber *)numberWithUnsignedShort:(unsigned short)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithUnsignedInt:(unsigned int)value; + (NSNumber *)numberWithLong:(long)value; + (NSNumber *)numberWithUnsignedLong:(unsigned long)value; + (NSNumber *)numberWithLongLong:(long long)value; + (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; + (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0); + (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);
我认为
+[NSNumber numberWithInt:]
是正确的方法,因为Best way to implement Enums with Core Data的被接受答案使用了这个方法。例如:[NSNumber numberWithInt:UIViewAnimationCurveLinear]
但是,如果
+[NSNumber numberWithInt:]
是正确的,那么为什么呢?对于一个位运算的
enum
,例如:enum { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 }; typedef NSUInteger UIViewAutoresizing;
我猜测
+[NSNumber numberWithUnsignedInteger:]
是正确的方法,因为在typedef
之后有明确的NSUInteger
。是这样吗?例如:[NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone]