我是一名 Java 程序员,正在学习 Objective-C,但我在变量的实现方面遇到了问题,类似于 Java 中的静态最终类变量。在 PolygonShape 类中,我希望 NSDictionary 具有多边形类型,可以从类内部和外部访问。我已经尝试了以下方法:
多边形形状.h:
...
extern NSDictionary *polygonTypes;
@interface PolygonShape
...
多边形形状.m:
...
NSDictionary *polygonTypes = nil;
@implementation PolygonShape
- (id)init {
self = [super init];
if (self) {
if(!polygonTypes) {
polygonTypes = [NSDictionary dictionaryWithObjectsAndKeys:
@"triangle", [NSNumber numberWithInt: 3], @"quadrilateral", [NSNumber numberWithInt: 4],
@"pentagon", [NSNumber numberWithInt: 5], @"hexagon", [NSNumber numberWithInt: 6],
@"heptagon", [NSNumber numberWithInt: 7], @"octagon", [NSNumber numberWithInt: 8],
@"enneagon", [NSNumber numberWithInt: 9], @"decagon", [NSNumber numberWithInt: 10],
@"hendecagon", [NSNumber numberWithInt: 11], @"dodecagon", [NSNumber numberWithInt: 12], nil];
}
}
...
但这还不够好,因为如果我想在不初始化 PolygonShape 实例的情况下从其他地方(例如 main.m)访问多边形类型,则变量 polygonTypes 为 nil。所以我使用了工作正常的静态函数:
多边形形状.m:
static NSDictionary *polygonTypes = nil;
@implementation PolygonShape
...
+ (NSDictionary *) polygonTypesDicionary {
if(!polygonTypes) {
polygonTypes = [NSDictionary dictionaryWithObjectsAndKeys:
@"triangle", [NSNumber numberWithInt: 3], @"quadrilateral", [NSNumber numberWithInt: 4],
@"pentagon", [NSNumber numberWithInt: 5], @"hexagon", [NSNumber numberWithInt: 6],
@"heptagon", [NSNumber numberWithInt: 7], @"octagon", [NSNumber numberWithInt: 8],
@"enneagon", [NSNumber numberWithInt: 9], @"decagon", [NSNumber numberWithInt: 10],
@"hendecagon", [NSNumber numberWithInt: 11], @"dodecagon", [NSNumber numberWithInt: 12], nil];
}
return polygonTypes;
}
现在这没问题,但我想知道,最好的方法是什么,是否可以将 extern 用于 NSDictionary 而不必在类方法中初始化它?(而且我知道单例类,但我真的很想在 PolygonShape 类中有一个常量的多边形类型数组)。