2012-04-21 37 views
11
  1. Mỗi giá trị của một typedef enum được coi là int?Làm thế nào để chuyển đổi typedef enum sang NSNumber?

    Ví dụ: đưa ra sau typedef enum:

    // UIView.h 
    
    typedef enum { 
        UIViewAnimationCurveEaseInOut, 
        UIViewAnimationCurveEaseIn, 
        UIViewAnimationCurveEaseOut, 
        UIViewAnimationCurveLinear 
    } UIViewAnimationCurve; 
    

    Làm thế nào để tôi biết được phương pháp sử dụng để tạo ra một 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); 
    

    Tôi nghĩ +[NSNumber numberWithInt:] là phương pháp đúng để sử dụng vì accepted answer to Best way to implement Enums with Core Data sử dụng nó. Ví dụ:

    [NSNumber numberWithInt:UIViewAnimationCurveLinear] 
    

    Nhưng nếu +[NSNumber numberWithInt:] là chính xác thì tại sao?

  2. Đối với một Bitwise enum, ví dụ .:

    enum { 
        UIViewAutoresizingNone     = 0, 
        UIViewAutoresizingFlexibleLeftMargin = 1 << 0, 
        UIViewAutoresizingFlexibleWidth  = 1 << 1, 
        UIViewAutoresizingFlexibleRightMargin = 1 << 2, 
        UIViewAutoresizingFlexibleTopMargin = 1 << 3, 
        UIViewAutoresizingFlexibleHeight  = 1 << 4, 
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5 
    }; 
    typedef NSUInteger UIViewAutoresizing; 
    

    Tôi đoán rằng +[NSNumber numberWithUnsignedInteger:] là phương pháp đúng để sử dụng vì có một rõ ràng NSUInteger sau typedef. Chính xác? Ví dụ .:

    [NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone] 
    

Trả lời

16

cú pháp Ngày nay hiện đại có thể được sử dụng:

@(UIViewAnimationCurveLinear)

6

[NSNumber numberWithInt: your_enum_int_variable];

+0

Bạn rock! Cảm ơn vì điều này. –