2011-09-04 36 views
0

我試着去了解如何定義有效的元素列表的一類: 比方說,我有一個類People,我需要接受只有3個字符串作爲可能的有效名稱 @"Luke"@"Paul",@"Mark"枚舉和NSDictionary的定義有效的元素列表中可可

我想用枚舉和的NSDictionary這樣的組合(但我顯然不知道這方法的正確性):

//INTERFACE********************* 
typedef enum { 
Luke,Paul,Mark 
}ValidName; 

@interface Person : NSObject{ 
    // some code 

} 

@end 


//IMPLEMENTATION******************* 
@interface Person(private){ 
NSMutableDictionary *_validNamesDict; 
} 
@end 

@interface Person:NSObject 
- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     _validNamesDict = [[NSMutableDictionary alloc] init]; 
     [_validNamesDict setObject: @"Luke" forKey:[NSNumber numberWithInt: Luke]]; 
     [_validNamesDict setObject: @"Paul" forKey:[NSNumber numberWithInt: Paul]]; 
     [_validNamesDict setObject: @"Mark" forKey:[NSNumber numberWithInt: Mark]]; 
    } 

    return self; 
} 

//Some code .... 

現在在班上的其他同學我指的是這名稱與:

[_validNameDict objecWithKey:[NSNumber numberWithInt: Luke]]; 

我很確定這不是最好的方法。你能否建議我一種有效的方法來管理這種情況?我讀了一些關於使用extern關鍵字和定義到靜態變量的類......這可能是更好的方法嗎?

+0

我確定有更好的方法來做你想做的事情,但目前還不清楚你實際上想做什麼。這些是*的唯一有效值*?在什麼情況下使用這些值,以及在什麼情況下它們的有效性是重要的? – Chuck

+0

@Chuck我正在開發一個API的庫,其中一些函數只接受特定的值。所以我需要一種方法來限制只使用這些數據庫的開發人員。 – MatterGoal

回答

3

我想你想要的這裏是設置,不是地圖凹口 - 是一個NSSet,而不是一個NSDictionary

假設您已設置validNames並且您想確定名稱n是否在該集合中。一旦你的設置被初始化,只需執行以下操作:

BOOL nameIsValid = [validNames containsObject:n]; 
+0

@「Jonathan Grynspan」在你看來,這是更好的方式來定義NSSet:在init函數中還是通過靜態變量? – MatterGoal

+0

您必須在某個時間點初始化它,但是如果它每次都有相同的內容,請使用一個'static'實例並在類的''initialize'方法中初始化它(請參閱該方法的文檔以瞭解如何使用它。) –