1

Objective C では、次のような 20 ほどの RPG 属性を記述します。

@interface Employee : NSObject
{
    NSString *name;
    NSString *nickname;
    NSString *filename;

    // Attributes
    int personality;
    int behaviour;
    int attitude;
    int workrate;
    int morale;
    int health;
}

すべての RPG 属性がルールをリッスンするようにしたいと考えています。つまり、性格は 1 ~ 99、健康状態は 1 ~ 100、士気は 0 ~ 100 などです。

保存された数値がルール内にあるかどうかを自動的にテストする属性のクラスを作成できるかどうかを知りたいです。このようにして、20 の異なるフィールドでテストする時間を節約できます。

辞書を使用できると思いますが、これを行う場合でも、属性がルールをリッスンするようにしたいと思います。

このようなことは可能ですか?

4

1 に答える 1

3

ええ、通常は各属性を a@propertyにして、無効な値を拒否または修正するカスタム セッターを提供します。

.h ファイル:

@interface Employee : NSObject

@property (assign, nonatomic, readwrite) int personality;
// others omitted

@end

.m ファイル:

@implementation Employee

- (void)setPersonality:(int)personality {
    if (personality < 1)
        personality = 1;
    else if (personality > 99)
        personality = 99;
    // _personality is an auto-generated backing instance variable
    _personality = personality;
}

// - (int)personality { ... } will be auto-generated

これらの属性のすべてに最小/最大値がある場合はstatic、値を制限する関数を作成します。

static int restrict(int minValue, int maxValue, int value) {
    if (value < minValue)
        value = minValue;
    else if (value > maxValue)
        value = maxValue;
    return value;
}

...

- (void)setPersonality:(int)personality {
    // _personality is an auto-generated backing instance variable
    _personality = restrict(1, 99, personality);
}

_personality注:直接 (およびフレンドを)割り当ててはいけません。セッターを呼び出すには、self.personality = 34;またはを使用する必要があります。employee.personality = 34;

于 2013-12-19T16:50:54.737 に答える