在我的应用程序中,我必须为不同的名称显示不同的颜色取决于起始字母
abcdeABCDE - gray color
:
:
pqrsPQRS - red Color
vuwxyzUVWXYZ - black color.
我已经实现了这样......
这给出了我想要的正确结果,但这不是最佳解决方案
有没有简单的解决方案呢
NSString *FirstLetter = [empName substringFromIndex:1];
if ( [FirstLetter isEqualToString:@"p"] || [FirstLetter isEqualToString:@"q"] || [FirstLetter isEqualToString:@"r"] || [FirstLetter isEqualToString:@"=s"] || [FirstLetter isEqualToString:@"P"] || [FirstLetterisEqualToString:@"Q"] || [FirstLetter isEqualToString:@"R"] || [FirstLetter isEqualToString:@"S"])
{
cell.textalbel.textColr =[UIColor redColor];
}
答案 0 :(得分:4)
如果起始字母始终是英文字符(或任何可以通过适合unsigned char
的小整数表示),那么这是一个解决方案(我能想到的最快的一个 - 不使用跳转除外对于初始化的第一次检查,只使用普通的旧整数而不是NSString
个实例的重量较重的比较:
- (UIColor *)colorFromName:(NSString *)name
{
static UIColor *strs[1 << CHAR_BIT] = { nil };
static BOOL initted = NO;
if (!initted) {
strs['a'] = [UIColor greyColor];
strs['b'] = [UIColor whiteColor];
// ...
strs['z'] = [UIColor blueColor];
initted = YES;
}
unsigned char first = tolower([name characterAtIndex:0]);
return strs[first];
}
答案 1 :(得分:4)
有很多方法可以实现这一点,但最简单的可能就是:
static UIColor *colorForFirstLetterOfString(NSString *string) {
unichar c = [[[string substringToIndex:1] lowercaseString] characterAtIndex:0];
if (c >= 'a' && c <= 'e') return [UIColor grayColor];
// ...
else if (c >= 'p' && c <= 's') return [UIColor redColor];
else if (c >= 'u' && c <= 'z') return [UIColor blackColor];
else return nil;
}
如果您需要超出ASCII字符集,可以将数字常量用于Unicode代码点,如下所示:
// lower-case Greek letters
else if (c >= 0x03B1 && c <= 0x03C9) return [UIColor blueColor];
或者您可以在字符常量上使用L
前缀,如下所示:
// lower-case Greek letters
else if (c >= L'α' && c <= L'ω') return [UIColor blueColor];
答案 2 :(得分:2)
您可以使用字典。类似于以下内容:
NSString *empName = @"Henry";
UIColor *color = nil;
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
[UIColor redColor], @"abcde",
[UIColor blueColor], @"fghij",
nil];
NSString *firstLetter = [empName substringWithRange:NSMakeRange(0, 1)];
for (NSString *key in dict.keyEnumerator) {
if ([key rangeOfString:firstLetter options:NSCaseInsensitiveSearch].location != NSNotFound) {
color = [dict objectForKey:key];
break;
}
}
NSLog(@"%@", color);