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等等。

我想知道我是否可以为 Attributes 创建一个类,该类将自动测试存储的数字是否在规则范围内;通过这种方式,我可以节省对 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 回答