第一名 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