我想創建一個類似枚舉的字符串集合,這種方式也使我能夠按順序值排序,而不是按字母值排序。例如:在Objective-C中創建有序字符串值的有效方法
「極低」= 0
「非常低」= 1
「低」= 2
「中等= 3
「高」= 4
等等。
我知道在Java和C#中,例如枚舉類型可以除了它們的序數值之外還有一個值。
有沒有什麼辦法可以在Objective-C中實現相同的目標?
謝謝!
我想創建一個類似枚舉的字符串集合,這種方式也使我能夠按順序值排序,而不是按字母值排序。例如:在Objective-C中創建有序字符串值的有效方法
「極低」= 0
「非常低」= 1
「低」= 2
「中等= 3
「高」= 4
等等。
我知道在Java和C#中,例如枚舉類型可以除了它們的序數值之外還有一個值。
有沒有什麼辦法可以在Objective-C中實現相同的目標?
謝謝!
只要保持字符串I/O和爲所有計算使用枚舉。例如,定義枚舉:
typedef enum { ExtremelyLow, VeryLow, ... High } Rating;
您可以使用此枚舉在switch
報表等,現在你可以使用一個NSArray
或只是一個簡單的C-陣列從枚舉文字映射到字符串:
NSString *RatingToString[] = { @"Extremely Low", @"Very Low", ..., @"High" };
Rating myRating;
NSString *strMyRating = RatingToString[myRating];
從字符串版本到枚舉是更多的參與,你可以使用相同的RatingToString
數組,並進行適當的比較(可能不區分大小寫,模糊等)。你也可以使用一個NSDictionary
:
NSDictionary StringToRating = [NSDictionary dictionaryWithObjectsAndKeys: RatingToString[ExtremelyLow], [NSNumber numberWithInt:ExtremelyLow, ..., nil];
現在查找會做你的字符串完全匹配,並返回一個Rating
包裝成一個NSNumber
。
我不知道直接的方法來做到這一點。但是,您可以定義一個OBJ-C級這樣的:
@interface EnumLike : NSObject
{
NSString* title;
NSInteger value;
}
@property (nonatomic, readonly) NSString* title;
@property (nonatomic, readonly) NSInteger value;
// Something like enum
+ (id)extremelyLow;
+ (id)veryLow;
...
+ (id)high;
};
除了與開關這方面的工作可以做的工作。我經常使用類似的類型爲用戶聲明一些「枚舉」,因爲這些實例的列表可以綁定到NSArrayController並在UI中使用。
哇這是brilliate!這幾乎就是我正在尋找的東西。唯一缺少的部分是添加選項來爲這些「預定義」元素創建一個,方法是爲該值提供一個字符串 - 例如「非常低」,然後獲取相應的EnumLike對象。我需要這個,因爲我正在從一個文件中讀取數據,我需要將這些字符串解析成我可以使用的東西。 – 2011-05-18 09:29:19
您可以使用一類像Gobra建議或c結構數組:
typedef struct {
int type;
NSString *desc;
} NXENumToNSString;
NXENumToNSString kNXGMWidgetTypes[] = {
{1, @""},
{2, @"imageGallery"},
{3, @"dotImageGallery"},
{4, @"video"},
{5, @"webView"},
{6, @"image"}
};
NSInteger
intToStringForArray(NXENumToNSString *buffer, size_t length, NSString *str)
{
int result = NSIntegerMin;
NXENumToNSString *scan, *stop;
scan = buffer;
stop = scan + length;
while (scan < stop) {
if ([scan->desc isEqualToString:str]) {
result = scan->type;
break;
}
scan++;
}
return result;
}
那麼你可以做這樣的事情:
size_t l = sizeof(kNXGMWidgetTypes)/sizeof(NXENumToNSString);
NSInteger result = intToStringForArray(kNXGMWidgetTypes, l, str);
字典的想法看起來非常好。我可以像這樣製作靜態數組,並且它會像我想要的那樣完成 - 我可以從文件讀取字符串,並通過調用字典objectForKey立即知道它的值:並從文件中傳遞字符串作爲鍵 – 2011-05-18 13:38:25
「NSString * strMyRating = RatingToString [myRating];」你正在初始化'NSString *''char *' – user102008 2012-05-04 21:25:35
@ user102008 - oops,修正了錯字,謝謝 – CRD 2012-05-04 21:47:23