1

私は Java プログラマーで、Objective-C を学んでおり、変数の実装に問題があります。これは、Java の静的最終クラス変数と同様です。クラス PolygonShape では、クラス内外からアクセスできる多角形タイプの NSDictionary が必要です。私はすでに次のことを試しました:

PolygonShape.h:

...
extern NSDictionary *polygonTypes;

@interface PolygonShape
...

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 になるため、これでは十分ではありません。だから私は正常に動作する静的関数を使用しました:

PolygonShape.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;
}

これで問題ありませんが、これを行う最善の方法は何ですか?また、クラスメソッドで初期化せずに NSDictionary に extern を使用することは可能ですか? (そして、singeltonクラスについては知っていますが、PolygonShapeクラス内にポリゴンタイプの定数配列が本当に欲しいです)。

4

1 に答える 1

1

私はJavaプログラマーです、[…]

そこにあなたの問題があります。

Objective-Cは多くの点でJavaとはまったく異なる言語であり、多くのイディオムはあなたにとってまったく異質なものかもしれません。

例として; Polygonクラスが処理できるポリゴン形状の種類を知りたい、または必要なのはなぜですか?

特定の数の角を持つポリゴンを作成しようとしているが、作成できない場合は、そうです。知っておく必要があります。

それとは別に?少なくとも私が見る限り、あまり有用な情報ではありません。

実際、なぜ多角形はにどのような形が存在するかを知る必要があるのでしょうか?

のアイデアそのものを少しの間流し、staticあなたの問題を再考してください。悟りは必ず続くでしょう。

于 2011-08-23T11:21:43.787 に答える