0

在我的应用程序中,我必须为不同的名称显示不同的颜色取决于起始字母

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]; 
    }
4

3 回答 3

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];
}
于 2013-06-03T04:45:28.377 回答
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];
于 2013-06-03T04:48:23.080 回答
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);
于 2013-06-03T04:53:51.637 回答