2012-04-21 14 views
11
  1. Czy każda wartość typedef enum jest traktowana jako int?Jak przekonwertować typedef enum na NSNumber?

    przykład podane następujące typedef enum:

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

    Skąd wiem, która metoda do wykorzystania do tworzenia 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); 
    

    myślę +[NSNumber numberWithInt:] jest poprawna metoda, ponieważ accepted answer to Best way to implement Enums with Core Data używa. Np .:

    [NSNumber numberWithInt:UIViewAnimationCurveLinear] 
    

    Ale jeśli +[NSNumber numberWithInt:] jest poprawny, to dlaczego?

  2. Dla bitowego enum, np .:

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

    Zgaduję, że +[NSNumber numberWithUnsignedInteger:] jest poprawna metoda, ponieważ istnieje wyraźna NSUInteger po typedef. Poprawny? Np .:

    [NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone] 
    

Odpowiedz

16

Obecnie nowoczesny składni można stosować:

@(UIViewAnimationCurveLinear)

6

[NSNumber numberWithInt: your_enum_int_variable];

+0

Ty rock! Dziękuję za to. –