利剑出鞘—详点iOS数据处理

作者: ChiCoChiCo | 来源:发表于2016-08-07 08:09 被阅读528次
    看招

    第一名 NSString IOS开发中的大部分文本数据都用他处理,可以说他无处不在,无时不有[项目为单位]下面我们来看看我们常用的招式

    • 字符串替换 stringByReplacingOccurrencesOfString (比如在展示数据的时候,将空格换成\n,将br换成\n)

    • 字符串转数组 componentsSeparatedByString(比如用空格 逗号来分割一个字符串),顺便提一下数组回转字符串 componentsJoinedByString,回转的时候还可设置链接的字符串

    • 字符串的比较,这个老普遍了,例如将一个字符串和@""比较来判断他是不是为空,在这里需要注意的是,如果第一个比较的对象为NSNull活着不是字符串类型,程序会崩掉,需要仔细斟酌。

    • 字符串转数字 intValue integerValue floatValue,这里要着重强调的是floatValue,这种转换并不会精确,而且不好用,比如小数位为0就不要那位,这是我们需要用到IOS专门的数值处理类 —— NSDecimalNumber

    NSString *str = @"张三,李四,王五";
    //1.字符串替换
    str = [str stringByReplacingOccurrencesOfString:@"," withString:@"\n"];
    //字符串转数组
    NSArray *nameArr = [str componentsSeparatedByString:@"\n"];
    //数组在变回字符串
    str = [nameArr componentsJoinedByString:@" "];
    //字符串的比较
    //需要注意 在json解析的时候 str 是不是NSNull
    if ([@"" isEqualToString:str])
    {
      NSLog(@"");
    }
        
    //字符串转数字 但是不能精确,精确的需要使用NSNumber
    NSString *money = @"199.80";
    float fmoney = [money floatValue];
    NSLog(@"fmoney : %f",fmoney);
    

    第二名 NSDecimalNumber 价格处理的最好工具,苹果实在是太好了。随着电商的迅猛发展,app中价格处理自然是少不了的

    • 字符串初始化number initWithString:

    • 格式化价格,可以去掉小数点后面的0

    • 数值计算: decimalNumberByAdding decimalNumberBySubtracting decimalNumberByMultiplyingBy decimalNumberByDividingBy 功能 + - X ÷

    NSString *money = @"199.80";
    NSDecimalNumber *firstMoney = [[NSDecimalNumber alloc] initWithString:money];
        
    //输出的是 money: 199.8
    NSLog(@"money : %@",[firstMoney stringValue]);
        
    NSDecimalNumber *secondMoey = [[NSDecimalNumber alloc] initWithString:@"211"];
    NSDecimalNumber *total = [firstMoney decimalNumberByAdding:secondMoey];
    //输出的是 total :410.8
    NSLog(@"total :%@",[total stringValue]);
    

    第三名 NSArray NSMutableArray

    • 排序 sortedArrayUsingDescriptors: 结合NSSortDescriptor 来对数组进行排序 [常见的有姓名按照拼音排序,日期排序]

    • 查找元素 filteredArrayUsingPredicate:结合NSPredicate 查找数组中的元素,可以模糊和精确查找,只要设置好查找规则就好[常用于筛选数据,比如查找姓名中同姓的人,还有做单选的时候可以筛选出选择过的数据]

    • 让里边的元素执行相同的方法 makeObjectsPerformSelector [常用于移除子视图,单选 多选 全选 改变一组选中按钮的状态]

    • 移除 替换 增加 数组中的元素 removeObjectsInArray removeObjectsInRange replaceObjectAtIndex

    下面给出示意代码

    //排序
    NSArray <NSString *>*dateArr = @[@"2015-08-06",
                             @"2014-05-09",
                             @"2016-02-03",
                             @"2011-04-23"];
    NSSortDescriptor *descriptor  = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
    NSArray *resultArr = [dateArr sortedArrayUsingDescriptors:@[descriptor]];
     NSLog(@"resultArr : %@",resultArr);
        
    //查找
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF = '2015-08-06'"];
     resultArr = [dateArr filteredArrayUsingPredicate:predicate];
        NSLog(@"%@",resultArr);
        
    //让里边的元素执行相同的方法
    NSArray <UIView *>*subViews;
      [subViews makeObjectsPerformSelector:@selector(removeFromSuperview)];
        
    //移除和替换元素
    NSMutableArray *mutArr = [NSMutableArray array];
    //移除单个元素
    [mutArr removeObject:[mutArr firstObject]];
    //移除一组数据:比如arr 是mutArr的一组数据
    NSArray *arr;
    [mutArr removeObjectsInArray:arr];
    //通过下标移除数据 移除第5个后的5个数据
    [mutArr removeObjectsInRange:NSMakeRange(4, 5)];
    //替换摸个元素 比如将@"" 换到第一的位置上
    NSString *str = @"";
    [mutArr replaceObjectAtIndex:0 withObject:str];
    

    第四名 NSDictory NSMutableDictory

    • 常用方法 setObject:forKey: removeObjectForKey: initWithObjectsAndKeys 常用于向服务器提交参数时构造提交参数

    • 特别注意: initWithObjectsAndKeys --》 这个方法中如果有一个键值对的object为nil的话,字典只会初始化到这一项前面的数据,后面的不会执行,然后你提交到服务器的参数就不完整了,这是都么危险和尴尬的事情啊

    最后在提供一个输出必用小技巧

    #ifndef __OPTIMIZE__
    //调试模式
    #define NSLog(xxx, ...)
     NSLog((@"%s [第%d行]: " xxx), __FUNCTION__, __LINE__, ##__VA_ARGS__)
    
    #else
    //打包模式
    #define NSLog(...){}
    #endif
    

    相关文章

      网友评论

        本文标题:利剑出鞘—详点iOS数据处理

        本文链接:https://www.haomeiwen.com/subject/pmclsttx.html