一、其他集合类
前面我们学习了NSArray, 集合类还有两个常用的类,NSSet和NSDictionary。
1. NSSet与NSMutableSet
与NSString不同,NSSet里面的对象没有顺序。
NSSet基本使用方法:
NSSet *s = [NSSet set];
// 创建
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
// 输出每个元素
NSLog(@"%@", str);
// 元素个数
NSLog(@"%ld", s2.count);
NSMutableSet的使用:
添加元素:[s addObject:];
删除元素:[s removeObject:];
2. NSDictionary和NSMutableDictionary
Dictionary的英文意思是“字典”,字典是通过索引找到相应的字,NSDictionary也一样,NSDictionary里面的每个对象都有一个key,要找到某个对象,只需知道它的key值。和NSSet一样,字典是无序的。
1)NSDictionary的基本使用:
// 创建单个对象
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
// 通过键集合数组和值集合数组创建
NSArray *keys = @[@"name", @"address"];
NSArray *objects = @[@"jack", @"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
// 创建多个对象,注意使用nil结束
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
<span style="white-space:pre"> </span>@"jack", @"name",
<span style="white-space:pre"> </span>@"北京", @"address",
<span style="white-space:pre"> </span>@"32423434", @"qq", nil];
// 快速创建方法
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// 访问对象
id obj = [dict objectForKey:@"name"];
// 快速访问对象
id obj = dict[@"name"];
NSLog(@"%@", obj);
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
2)NSMutableDictionary的基本使用:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
// 为相同的key添加对象会覆盖原来的对象
[dict setObject:@"rose" forKey:@"name"];
// 移除键值对
[dict removeObjectForKey:<#(id)#>];
// 错误写法,@{}创建的是不可变字典
NSMutableDictionary *dict2 = @{@"name" : @"jack"};
[dict2 setObject:@"rose" forKey:@"name"];
// 直接输出字典
NSLog(@"%@", dict);
直接输出字典:
3)字典的遍历:
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};
// 使用for循环遍历
// 取出所有Key
NSArray *keys = [dict allKeys];
for (int i = 0; i<dict.count; i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@", key, object);
}
// 使用Block遍历,用法和数组Block遍历类似
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// 停止遍历
*stop = YES;
}];
二、NSNumber、NSValue
1.NSNumber
NSNumber用于包装int对象,使基本数据类型能够放入集合类中。
NSNumber基本使用:
// 包装基本数据类型
NSNumber *num = [NSNumber numberWithInt:10];
// 放入集合对象
NSDictionary *dict = @{
@"name" : @"jack",
@"age" : num
};
// 取出NSNumber对象
NSNumber *num2 = dict[@"age"];
// 转换成基本数据类型
int a = [num2 intValue];
NSLog(@"%d" , a);
// 快速包装,@20会自动将@后面的基本数据类型包装成OC对象
NSArray *array = @[
@{@"name" : @"jack", @"age" : @20},
@{@"name" : @"rose", @"age" : @25},
@{@"name" : @"jim", @"age" : @27}
];
// 将变量包装成NSNumber对象
int age = 100;
@(age);
2.NSValue
NSValue是NSNumber的父类,可以包装所有的基本数据类型。
NSValue的基本使用:
CGPoint p = CGPointMake(10, 10);
// 将结构体包装成Value对象
NSValue *value = [NSValue valueWithPoint:p];
// 将value转为对应的结构体
[value pointValue];
三、NSDate
之前我们使用结构体代表日期。使用NSDate对象表示日期的好处是,能为对象增加方法。
1.NSDate的基本使用
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间
NSLog(@"%@", date);
// 使用时间间隔创建
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
// 从date到现在经过的时间
[date2 timeIntervalSinceNow];
2.日期格式化类
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// y 年 M 月 d 日
// m 分 s 秒 H (24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 格式化后的日期转为字符串
NSString *str = [formatter stringFromDate:date];
// 字符串转换为格式化日期
NSString *time = @"2015/01/27 15:32";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);