是否可以将枚举范围扩展到Objective-C中的类?

时间:2012-11-20 19:25:21

标签: objective-c enums

我是Objective-C的新手并试图弄清楚枚举。有没有办法将枚举范围扩展到类,以便值可以被另一个类使用?像这样:

@interface ClassA {
    typedef enum {
        ACCEPTED,
        REJECTED
    } ClassAStatus;
}
@end

@interface ClassB {
    typedef enum {
        ACCEPTED,
        REJECTED
    } ClassBStatus;
}
@end

虽然这显然不起作用。或者是否有更好的方法来完成枚举?

编辑:我想我的措辞不明确,但我不是在问如何申报枚举。我知道把它们放在文件的顶部是有效的。我问是否有办法确定范围,因此值不是整个文件的全局值。

3 个答案:

答案 0 :(得分:6)

您必须在公共枚举前加上前缀。只需将枚举定义放在类的标题中即可。

// ClassA.h
typedef enum {
    ClassAStatusAccepted,
    ClassAStatusRejected
} ClassAStatus;

@interface ClassA {
    ClassAStatus status;
}
@end


// ClassB.h
typedef enum {
    ClassBStatusAccepted,
    ClassBStatusRejected
} ClassBStatus;

@interface ClassB {
    ClassBStatus status;
}
@end

Apple就是这样做的。

或者你可以使用新的风格:

// UIView.h
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
    UIViewAnimationCurveEaseInOut,         // slow at beginning and end
    UIViewAnimationCurveEaseIn,            // slow at beginning
    UIViewAnimationCurveEaseOut,           // slow at end
    UIViewAnimationCurveLinear
};

答案 1 :(得分:3)

只需将enum放在.h的顶部,就像Apple在UITableView.h中所做的那样,例如:

//
//  UITableView.h
//  UIKit
//
//  Copyright (c) 2005-2012, Apple Inc. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIScrollView.h>
#import <UIKit/UISwipeGestureRecognizer.h>
#import <UIKit/UITableViewCell.h>
#import <UIKit/UIKitDefines.h>

typedef NS_ENUM(NSInteger, UITableViewStyle) {
    UITableViewStylePlain,                  // regular table view
    UITableViewStyleGrouped                 // preferences style table view
};

typedef NS_ENUM(NSInteger, UITableViewScrollPosition) {
    UITableViewScrollPositionNone,
    UITableViewScrollPositionTop,    
    UITableViewScrollPositionMiddle,   
    UITableViewScrollPositionBottom
};                // scroll so row of interest is completely visible at top/center/bottom of view

typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {
    UITableViewRowAnimationFade,
    UITableViewRowAnimationRight,           // slide in from right (or out to right)
    UITableViewRowAnimationLeft,
    UITableViewRowAnimationTop,
    UITableViewRowAnimationBottom,
    UITableViewRowAnimationNone,            // available in iOS 3.0
    UITableViewRowAnimationMiddle,          // available in iOS 3.2.  attempts to keep cell centered in the space it will/did occupy
    UITableViewRowAnimationAutomatic = 100  // available in iOS 5.0.  chooses an appropriate animation style for you
};

您可能认识到其中一些名称,但您可能没有意识到他们实际上是苹果公司头文件中的公开enum

答案 2 :(得分:2)

只想添加@ DrummerB的答案,我通常会这样写。 camelCase中的命名空间,然后是大写的常量。

typedef enum {
    ClassAStatus_ACCEPTED,
    ClassAStatus_REJECTED
} ClassAStatus;