【问题标题】:How to convert typedef enum to NSNumber?如何将 typedef 枚举转换为 NSNumber?
【发布时间】:2012-05-02 13:34:07
【问题描述】:
  1. 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:] 是正确的使用方法,因为accepted answer to Best way to implement Enums with Core Data 使用它。例如:

    [NSNumber numberWithInt:UIViewAnimationCurveLinear]
    

    但是,如果+[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;
    

    我猜+[NSNumber numberWithUnsignedInteger:] 是正确的使用方法,因为在typedef 之后有一个明确的NSUInteger。正确的?例如:

    [NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone]
    

【问题讨论】:

    标签: enums typedef nsnumber nsinteger nsuinteger


    【解决方案1】:

    [NSNumber numberWithInt:your_enum_int_variable];

    【讨论】:

    • 你摇滚!谢谢。
    【解决方案2】:

    现在可以使用现代语法:

    @(UIViewAnimationCurveLinear)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2016-03-20
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多