Это старый вопрос, но его можно обновить, чтобы использовать более современный синтаксис. Во-первых, начиная с iOS 6, Apple рекомендует определять перечисления как:
typedef NS_ENUM(NSInteger, MyEnum) {
MyEnumValue1 = -1, // default is 0
MyEnumValue2, // = 0 Because the last value is -1, this auto-increments to 0
MyEnumValue3 // which means, this is 1
};
Тогда, поскольку у нас есть перечисление, представленное как NSInteger
s внутри, мы можем поместить их в NSNumber
s для хранения в качестве ключа для словаря.
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
// set the value
dictionary[@(MyEnumValue1)] = @"test";
// retrieve the value
NSString *value = dictionary[@(MyEnumValue1)];
РЕДАКТИРОВАТЬ: Как создать одноэлементный словарь для этой цели
С помощью этого метода вы можете создать одноэлементный словарь, чтобы помочь с этим. Вверху любого файла вы можете использовать:
static NSDictionary *enumTranslations;
Затем в вашем init
или viewDidLoad
(если вы делаете это в контроллере пользовательского интерфейса), вы можете сделать это:
static dispatch_once_t onceToken;
// this, in combination with the token above,
// will ensure that the block is only invoked once
dispatch_async(&onceToken, ^{
enumTranslations = @{
@(MyEnumValue1): @"test1",
@(MyEnumValue2): @"test2"
// and so on
};
});
// alternatively, you can do this as well
static dispatch_once_t onceToken;
// this, in combination with the token above,
// will ensure that the block is only invoked once
dispatch_async(&onceToken, ^{
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
mutableDict[@(MyEnumValue1)] = @"test1";
mutableDict[@(MyEnumValue2)] = @"test2";
// and so on
enumTranslations = mutableDict;
});
Если вы хотите, чтобы этот словарь был видимым снаружи, переместите статическую декларацию в файл заголовка (.h
).