我是Objective-C的新手并试图弄清楚枚举。有没有办法将枚举范围扩展到类,以便值可以被另一个类使用?像这样:
@interface ClassA {
typedef enum {
ACCEPTED,
REJECTED
} ClassAStatus;
}
@end
@interface ClassB {
typedef enum {
ACCEPTED,
REJECTED
} ClassBStatus;
}
@end
虽然这显然不起作用。或者是否有更好的方法来完成枚举?
编辑:我想我的措辞不明确,但我不是在问如何申报枚举。我知道把它们放在文件的顶部是有效的。我问是否有办法确定范围,因此值不是整个文件的全局值。
答案 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;