事物分段处理的好处,字符串处理

版权声明:原创文章,未经博主允许禁止转载。欢迎点击头像上方“郭晓东的专栏”查看专栏 https://blog.csdn.net/hherima/article/details/83374809

今天处理一个十六进制色值和alpha的问题,忽然想到。事物分段处理,逻辑容易的多。这也让我想起了快速排序

现在有一个字符串@"#ffffff,0.2"或者@"#ffffff"这种无alpha默认是1.0,程序要将其解析成一个色值和alpha值。

老的处理,OC代码片段

+ (UIColor *)colorWithHexAlphaString:(NSString *)hexString {
CGFloat alpha = 1.0;
    if(hexString.length > 7){
        NSRange commaRan = [hexString rangeOfString:@","];
        NSUInteger commaLen = [@"," length];
        if (commaRan.location != NSNotFound) {
            NSUInteger alphaLen = MAX(hexString.length - commaRan.location - 1,0);
            alpha = [[hexString substringWithRange:NSMakeRange(commaRan.location + commaLen, alphaLen)] floatValue];
        }
    }
    //hex的解析略
    //if ([hexString length] < 6) {
    //    return nil;
    //}else{
    //    hexString = [hexString substringWithRange:(NSMakeRange(0, 6))];
    //}
    
    //NSScanner *scanner = [[NSScanner alloc] initWithString:hexString];
    //unsigned hexValue = 0;
    //if ([scanner scanHexInt:&hexValue] && [scanner isAtEnd]) {
    //    int r = ((hexValue & 0xFF0000) >> 16);
    //    int g = ((hexValue & 0x00FF00) >>  8);
    //    int b = ( hexValue & 0x0000FF)       ;
    //    return [self colorWithRed:((float)r / 255)
    //                        green:((float)g / 255)
    //                         blue:((float)b / 255)
    //                        alpha:alpha];
    //}
}

新的处理,使用NSString的 componentsSeparatedByString,再逐个解析,oc代码片段

+ (UIColor *)colorWithHexAlphaString:(NSString *)hexString {
CGFloat alpha = 1.0;
    if(hexString.length > 7){
        NSArray* split = [hexString componentsSeparatedByString:@","];
        if ([split.lastObject length]) {
            alpha = [split.lastObject floatValue];
        }
    }
    //hex的解析略
    //if ([hexString length] < 6) {
    //    return nil;
    //}else{
    //    hexString = [hexString substringWithRange:(NSMakeRange(0, 6))];
    //}
    //
    //NSScanner *scanner = [[NSScanner alloc] initWithString:hexString];
    //unsigned hexValue = 0;
    //if ([scanner scanHexInt:&hexValue] && [scanner isAtEnd]) {
    //    int r = ((hexValue & 0xFF0000) >> 16);
    //    int g = ((hexValue & 0x00FF00) >>  8);
    //    int b = ( hexValue & 0x0000FF)       ;
    //    return [self colorWithRed:((float)r / 255)
    //                        green:((float)g / 255)
    //                         blue:((float)b / 255)
    //                        alpha:alpha];
    //}
}

猜你喜欢

转载自blog.csdn.net/hherima/article/details/83374809