| Foundation框架是iOS开发的基础框架,它包括字符串、集合、日期、时间等基础类。 1    NSSet和NSMutableSet
 NSSet和NSArray一样,也是一个集合,但是集合里的多个对象没有明显的顺序。NSSet不允许包含相同的元素,如果试图把两个相同的元素放在同一个NSSet集合中,则会只保留一个元素。NSMutableArray代表集合元素可变的NSSet集合,在NSSet的基础上增加了添加、删除的方法。
 // set的基本使用
 void test()
 {
 //"jack"只添加了一个
 NSSet *s = [NSSet setWithObjects:@"jack",@"rose", @"jack",@"jack3",nil];
 NSLog(@"%@", s);
 
 NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
 
 // 随机拿出一个元素
 NSString *str =  [s2 anyObject];
 
 NSLog(@"%@", str);
 
 NSLog(@"%ld", s2.count);
 }
 
 int main()
 {
 NSMutableSet *s = [NSMutableSet set];
 
 // 添加元素
 [s addObject:@"hack"];
 [s addObject:@"hasddfg"];
 
 // 删除元素
 [s removeObject:@"hasddfg"];
 return 0;
 }
 
 
 2    NSDictionary和NSMutableDictionary
 NSDictionary用于保存具有映射关系的数据,因此,NSDictionary集合里保存着两组值,一组值用于保存key,一组值用于保存value。key和value可以是任何引用类型的数据,key不允许重复。NSMutableDictionary继承了NSDictionary,它代表一个key-value可变的NSDictionary集合。
 void use()
 {
 /*创建NSDictionary的几种方法
 
 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
 
 
 NSArray *keys = @[@"name", @"address"];
 NSArray *objects = @[@"jack", @"北京"];
 
 NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
 
 
 
 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
 @"jack", @"name",
 @"北京", @"address",
 @"32423434", @"qq", nil];
 
 */
 
 //快速创建NSDictionary
 NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
 
 
 // id obj = [dict objectForKey:@"name"];  通过key,找到value
 id obj = dict[@"name"];  //快速访问
 NSLog(@"%@", obj);
 
 
 
 // 返回的是键值对的个数
 NSLog(@"%ld", dict.count);
 }
 
 void use2()
 {
 //只能快速创建NSDictionary,不能快速创建NSMutableDictionary ,会警告。如果运行时,修改Dictionary会出错
 // NSMutableDictionary *dict = @{@"name" : @"jack"};
 
 NSMutableDictionary *dict = [NSMutableDictionary dictionary];
 
 // 添加键值对,不能添加相同的key,只会添加一个“name”
 [dict setObject:@"jack" forKey:@"name"];
 [dict setObject:@"北京" forKey:@"address"];
 [dict setObject:@"rose" forKey:@"name"];
 
 NSLog(@"%@",dict);
 
 // 移除键值对
 // [dict removeObjectForKey:<#(id)#>];
 
 NSString *str = dict[@"name"];
 
 NSLog(@"%@", str);
 
 // 字典不允许有相同的key,但允许有相同的value(Object)
 // 字典的无序的
 NSDictionary *dict = @{
 @"address" : @"北京",
 @"name" : @"jack",
 @"name2" : @"jack",
 @"name3" : @"jack",
 @"qq" : @"7657567765"};
 
 //遍历NSDictionary
 
 //    NSArray *keys = [dict allKeys];
 //
 //    for (int i = 0; i<dict.count; i++)
 //    {
 //        NSString *key = keys[i];
 //        NSString *object = dict[key];
 //
 //
 //        NSLog(@"%@ = %@", key, object);
 //    }
 
 //系统自带的遍历NSDictionary方法
 [dict enumerateKeysAndObjectsUsingBlock:
 ^(id key, id obj, BOOL *stop) {
 NSLog(@"%@ - %@", key, obj);
 
 // *stop = YES;
 }];
 
 }
 
 
 
 3    NSNumber和NSValue
 NSNumber和NSValue都是包装类,NSValue是NSNumber的父类。NSValue代表更通用的包装类,用于包装short、int、long、float、char、指针、结构体、对象id等。NSNumber是更具体的包装类,主要用于包装C语言的各种数值类型 ,这样基本的数值类型就能添加到集合中了。NSNumber提供了实例方法和类方法用于包装基本数值类型,以及简化写法。
 + numberWithXxx: 类方法
 - initWithXxx: 实例方法
 @1;@12.3; 简化写法
 void test()
 {
 NSNumber *num = [NSNumber numberWithInt:10];
 
 NSDictionary *dict =  @{
 @"name" : @"jack",
 
 
 @"age" : num
 
 };
 
 NSNumber *num2 = dict[@"age"];
 
 
 int a = [num2 intValue];
 
 NSLog(@"%d" , a);
 }
 
 int main()
 {
 // @20  将 20包装成一个NSNumber对像
 
 
 NSArray *array = @[
 
 @{@"name" : @"jack", @"age" : @20},
 
 @{@"name" : @"rose", @"age" : @25},
 
 @{@"name" : @"jim", @"age" : @27}
 ];
 
 
 // 将各种基本数据类型包装成NSNumber对象
 @10.5;
 @YES;
 @'A'; // NSNumber对象
 
 @"A"; // NSString对象
 
 
 
 // 将age变量包装成NSNumber对象
 int age = 100;
 @(age);
 //[NSNumber numberWithInt:age];
 
 
 NSNumber *n = [NSNumber numberWithDouble:10.5];
 
 
 int d = [n doubleValue];
 //d = [n intValue];
 
 NSLog(@"d=%d",d);
 
 
 int a = 20;
 
 // @"20"
 NSString *str = [NSString stringWithFormat:@"%d", a];
 NSLog(@"%d", [str intValue]);
 
 // 结构体--->OC对象
 
 CGPoint p = CGPointMake(10, 10);
 // 将结构体转为Value对象
 NSValue *value = [NSValue valueWithPoint:p];
 
 // 将value转为对应的结构体
 // [value pointValue];
 
 NSArray *array = @[value ];
 
 
 return 0;
 }
 
 
 4    NSDate和NSDateFormatter
 NSDate对象代表日期与时间,通过类方法或者实例方法创建NSDate对象。NSDateFormatter代表一个日期格式器,它的功能就是完成NSDate与NSString之间的转换。NSDate与NSString之间转换的步骤如下:
 1、创建NSDateFormatter对象
 2、设置NSDateFormatter对象的dateFormat属性
 3、如果需要將NSdate转化为NSString,调用NSDateFormatter对象的stringFromDate方法;將NSString转换为NSDate,调用dateFromString
 void use()
 {
 // 创建一个时间对象
 NSDate *date = [NSDate date];
 // 打印出的时候是0时区的时间(北京-东8区)
 NSLog(@"%@", date);  //
 
 NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
 
 
 // 从1970开始走过的秒数
 NSTimeInterval seconds = [date2 timeIntervalSince1970];
 
 // [date2 timeIntervalSinceNow];
 }
 
 void date2string()
 {
 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];
 
 NSLog(@"%@", str);
 }
 
 int main()
 {
 // 09/10/2011
 NSString *time = @"2011/09/10 18:56";
 
 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 formatter.dateFormat = @"yyyy/MM/dd HH:mm";
 
 NSDate *date = [formatter dateFromString:time];
 NSLog(@"%@", date);
 return 0;
 }
 |