6

クラスのクラス プロパティの既定値を設定する方法はありますか? Javaでできることのように、クラスのコンストラクターで.eg.-

MyClass(int a, String str){//constructor
  this.a = a;
  this.str = str;
  
  // I am loking for similar way in Obj-C as follows 
  this.x = a*5;
  this.y = 'nothing';
}

私が探している理由:

約15のプロパティを持つクラスがあります。クラスをインスタンス化するとき、これらすべての変数/プロパティにいくつかのデフォルト値を設定する必要があります。したがって、これにより、コードが重くなり、複雑になります。そのクラス内からこれらのインスタンス変数にいくつかのデフォルト値を設定できれば、このコードの複雑さ/冗長性を軽減する必要があります。

4

3 に答える 3

4

パラメータを指定したくない場合は、

- (MyClass *)init {
    if (self = [super init]) {
        a = 4;
        str = @"test";
    }
    return self;
}

次に、実行するMyClass *instance = [[MyClass alloc] init]と、ivar のデフォルト値が設定されます。

しかし、パラメーターを使用してコンストラクターを投稿した理由がわかりませんが、それらを使用したくありません。

于 2010-07-19T14:34:29.427 に答える
3

完全な初期化のすべてのジョブを実行するinitを記述します。

次に、必要な数の異なるパラメーター セットを持つイニシエーターを作成します (ただし、考えてみてください。本当にこれが必要なのかあれが必要なのか?)。いいえ、彼らに仕事をさせないでください。すべてのデフォルト値(メッセージに提供しないもの、このメッセージ処理実装に)を入力させ、すべてを最初の値に与えます。

この最初の 1 つのイニシエーターは、指定イニシエーターと呼ばれます。また、Multiple Initializers と Designated Initializerを見逃さないようにしてください。 指定されたものを無視しないでください!

ご挨拶

于 2010-07-19T21:05:23.087 に答える
1

クラスのインターフェース:

@interface YourClass : NSObject {
    NSInteger a;
    NSInteger x;
    NSString  *str;
    NSString  *y;
}

- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString;

@end

次に、実装では:

- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString {
    if (self = [super init]) {
        a = someInteger;
        str = [someString copy];

        x = a * 5;
        y = [@"nothing" retain];
    }

    return self;
}

(アーキテクチャに応じて、またはNSIntegerのtypedefです。)intlong

于 2010-07-19T11:52:58.207 に答える