1

我是一名 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 类中有一个常量的多边形类型数组)。

4

1 回答 1

1

我是一名 Java 程序员,[…]

你的问题就在那里。

Objective-C 在很多方面与 Java 是完全不同的语言,很多习语对你来说可能很陌生。

举个例子; 为什么您想要或需要知道 Polygon 类可以处理什么样的多边形形状?

如果您尝试创建具有一定数量的角的多边形,但不能,那么是的,您需要知道。

除此之外?不是很有用的信息,至少据我所知。

事实上,为什么多边形形状甚至需要知道存在哪些其他形状?

暂时摆脱 的想法static并重新考虑您的问题。启蒙肯定会随之而来。

于 2011-08-23T11:21:43.787 回答