如何将typedef enum转换为NSNumber?

ma1*_*w28 12 enums typedef nsnumber nsinteger nsuinteger

  1. 每个值都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:]是正确的,为什么呢?

  2. 对于按位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:]是正确的使用方法,因为有一个明确的NSUIntegertypedef.正确?例如:

    [NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone]
    
    Run Code Online (Sandbox Code Playgroud)

Fel*_*cil 21

现在可以使用现代语法:

@(UIViewAnimationCurveLinear)


j2e*_*nue 7

[NSNumber numberWithInt:your_enum_int_variable];