2013-12-19 45 views
1

在Objective C中你寫20個左右的RPG屬性,如:是否可以將規則應用於RPG屬性的Objective C類屬性?

@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個不同的領域進行測試。

我想我可以使用字典,但即使我這樣做,我想確保屬性聽規則。

這種事情可能嗎?

+0

我懷疑你很快就會結束一個相對複雜的模型層。您可能希望調查覈心數據,因爲它的設計完全是爲了維護對象圖,並進行驗證。 – bbum

+0

是的,它會變得相當複雜。我會研究核心數據來整理所有內容 – zardon

回答

3

呀,你通常使每個屬性的@property並提供定製的setter其拒絕或修正值無效:

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

注意:你不能直接分配​​(朋友);您必須使用self.personality = 34;employee.personality = 34;來調用setter。

+0

非常感謝!這是非常好的 – zardon

相關問題