1 Bunu yapacak kişinin çözümdür, ama tüm makroları bilmek sana ihtiyacı:
Benim NSString değişken olarak tanımlanır
#define CONSTANT_1 1
#define CONSTANT_2 2
#define CONSTANT_3 3
#define STRINGIZE(x) #x
+ (int)getValueForContant:(NSString *)constantStr {
const char *charStr = STRINGIZE(CONSTANT_1);
NSString *str = [NSString stringWithUTF8String:charStr];
if ([constantStr isEqualToString:str]) {
return CONSTANT_1;
}
charStr = STRINGIZE(CONSTANT_2);
str = [NSString stringWithUTF8String:charStr];
if ([constantStr isEqualToString:str]) {
return CONSTANT_2;
}
return -1;
}
Ve olarak kullanmak:
int constVal = [ClassName getValueForContant:@"CONSTANT_1"];
Geri döndürme int
verir n.
sabitlerini tanımlamak için .plist
kullanın ve bu yönteme sağlanan dize parametresi olarak uygun değer elde etmek için geçiş yapın; Ben daha iyi kullanmak için öneriyoruz
+ (int)getValueForContant:(NSString *)constantStr
gibi bu yöntemi kullanabilirsiniz sabitleri: Sen gerektirir tanımlamak için olanlar bir sebep mi var? Gerçek sabitler yerine, demek istedim? Ve dahası, tanımlar her ne olursa olsun "@" biçiminde olamaz, böylece değişkeniniz sadece NSString * str = CONSTANT_3' olabilir (yani, @ ve "" dışında bırakabilirsiniz)? DashAndRest'in cevabı sorunu mükemmel bir şekilde çözüyor, ama tüm bu şey bana ilk başta garip tasarım gibi kokuyor ... – Gero