ma1*_*w28 12 enums typedef nsnumber nsinteger nsuinteger
每个值都typedef enum被视为一个int?
例如,给出以下内容typedef enum:
// UIView.h
typedef enum {
UIViewAnimationCurveEaseInOut,
UIViewAnimationCurveEaseIn,
UIViewAnimationCurveEaseOut,
UIViewAnimationCurveLinear
} UIViewAnimationCurve;
Run Code Online (Sandbox Code Playgroud)
我如何知道使用哪种方法创建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);
Run Code Online (Sandbox Code Playgroud)
我认为这+[NSNumber numberWithInt:]是正确的使用方法,因为使用Core Data实现Enums的最佳方法的可接受答案.例如:
[NSNumber numberWithInt:UIViewAnimationCurveLinear]
Run Code Online (Sandbox Code Playgroud)
但是,如果+[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;
Run Code Online (Sandbox Code Playgroud)
我猜这+[NSNumber numberWithUnsignedInteger:]是正确的使用方法,因为有一个明确的NSUInteger后typedef.正确?例如:
[NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone]
Run Code Online (Sandbox Code Playgroud)