黑马程序员—— Foundation框架NSArray、NSSet、NSDictionary、NSNumber、NSDate、NSValue
2015-11-03 13:19
471 查看
——- android培训、java培训、期待与您交流! ———-
传入多个元素:
是数组元素结束的标记,在多个元素的情况下如果不加入nil这
个元素会报错,并且非最后一个元素不能是nil,否则会提前结束
2.
3
错误写法:
2>只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
3>本身都不可变,都有一个可变的子类
快速创建(不可变):@[obj1, obj2, obj3]
快速访问元素:数组名[i]
快速创建(不可变):@{key1 : value1, key2 : value2}
快速访问元素:字典名[key]
将结构体转为Value对象
—NSArray
NSArray:OC数组,它不能存放空值(nil或者0)只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等1.NSArray的基本操作
1>最简单数组对象的建立
NSArray *array = [NSArray array]; // 这个array永远是空数组
2>一般数组的建立
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
传入多个元素:
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose",person, nil]; // nil
是数组元素结束的标记,在多个元素的情况下如果不加入nil这
个元素会报错,并且非最后一个元素不能是nil,否则会提前结束
3>快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];
4>输出NSArray的元素个数
NSLog(@"%ld", array3.count);
5>NSArray中元素的访问
NSLog(@"%@", [array3 objectAtIndex:1]); NSLog(@"%@", array3[1]); // 如同C中的数组访问
2.数组的遍历
1.for (int i = 0; i<array.count; i++) { NSLog(@"%@", array[i]); }
2.
int i = 0; for (id obj in array)//id obj代表着数组中的每一个元素 { NSUInteger i = [array indexOfObject:obj];// 找出obj元素在数组中的位置 NSLog(@"%ld - %@", i, obj); i++; //下面4行代码可以设置停止遍历的条件 //if (i==1) //{ // break; //} }
3
// 每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当做参数传给block [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%ld - %@", idx, obj); if (idx == 0) // 可以设置停止遍历的条件 {// 停止遍历 *stop= YES; } }];
block遍历的原理:
void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%ld - %@", idx, obj); if (idx == 0) { // 停止遍历 *stop = YES; } }; for (int i = 0; i<array.count; i++) // block会在内部生成一个for循环 { // 用来标记是否需要停止遍历 BOOL isStop = NO; // 取出元素 id obj = array[i]; myblock(obj, i, &isStop); if (isStop) { break; } }
—NSMutableArryy
NSMutableArryy: 可变数组,是NSArry的子类,可以用特定的方法对其做一些修改1.创建可变数组
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
2.添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
3.删除元素
[array removeAllObjects]; [array removeObject:@"jack"]; // 删除指定的对象 [array removeObjectAtIndex:0]; // 按照序号删除对象 [array addObject:nil]; // 错误写法
错误写法:
NSMutableArray *array = @[@"jack", @"rose"]; // 注意:@[ ] 只创建不可变数组
—NSSet
NSSet:是一种没有顺序的特殊的数组。1.创建一个NSSet对象
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
2.随机拿出一个元素
NSString *str = [s2 anyObject];
3.输出元素个数
NSLog(@"%ld", s2.count);
—NSMutableSet
NSMutableSet:可变的NSSet1.创建NSMutableSet
NSMutableSet *s = [NSMutableSet set];
2.添加元素
[s addObject:@"hack"];
3.删除元素
[s removeObject:(id)];
—NSSet和NSArray的对比
共同点:
1>都是集合,都能存放多个OC对象2>只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
3>本身都不可变,都有一个可变的子类
不同点:
NSArray有顺序,NSSet没有顺序—NSDictionary
NSDictionary:字典。如同字典一样知道目录就可以找到相应的内容。里面放的是键值。key是索引,value是对应的值。字典是无序的,字典不允许有相同的key,但允许有相同的value(Object)key ----> value 索引 ----> 文字内容
1.创建一对键值的字典
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack"forKey:@"name"];
2.创建多个键值
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSArray *keys = @[@"name", @"address"]; NSArray *objects = @[@"jack", @"北京"];
3.一次性创建多个键值
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"jack", @"name", @"北京", @"address", @"32423434",@"qq", nil ];
4.快速创建
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
5.根据键找到值
id obj = [dict objectForKey:@"name"]; id obj = dict[@"name"]; // 和上一行代码一样
NSLog(@"%@", obj);
6.返回的键值对的个数
NSLog(@"%ld", dict.count);
7.遍历字典
NSArray *keys = [dict allKeys]; for (int i = 0; i<dict.count; i++) { NSString *key = keys[i]; NSString *object = dict[key]; NSLog(@"%@ = %@", key, object); } [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@", key, obj); *stop = YES; }]; }
—NSMutableDictionary
NSMutableDictionary:可变字典1.创建可变的字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
2.添加键值对
[dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"北京" forKey:@"address"];
3.移除键值对
[dict removeObjectForKey:<#(id)#>]; NSLog(@"%@", dict);
4.数组与字典的混合使用
NSArray *persons = @[ @{@"name" : @"jack", @"qq" :@"432423423", @"books": @[@"5分钟突破iOS编程",@"5分钟突破android编程"]}, @{@"name" : @"rose", @"qq" :@"767567"}, @{@"name" : @"jim", @"qq" : @"423423"}, @{@"name" : @"jake", @"qq" :@"123123213"}]; //数组里有字典,字典里面有词典 NSDictionary *jim = persons[2]; NSLog(@"%@", jim); //表示jim所在的那个字典 NSString *bookName = persons[0][@"books"][1]; NSLog(@"%@", bookName); //先取数组0位置对应的字典,再取出自带里book数组的第2本书 NSArray *array = persons[0][@"books"];//将书全部放在arry数组里面 NSLog(@"%@", array); NSLog(@"%@", persons[1][@"qq"]); //先取出1位置对应的字典,再取出字典中qq这个key对应的数据
—集合的总结:
1>NSArray\NSMutableArray
有序快速创建(不可变):@[obj1, obj2, obj3]
快速访问元素:数组名[i]
2>NSSet\NSMutableSet
无序3>NSDictionary\NSMutableDictionary
无序快速创建(不可变):@{key1 : value1, key2 : value2}
快速访问元素:字典名[key]
—NSNumber
NSNumber:在前面学习的集合的元素只能是对象,但是如果想要把一般数据类型放进去就需要将它们转化成对象才行,OC中的NSNumber可以将一般数剧类型包装成对象。1.将基本数据类型转为NSNumber
NSNumber *num = [NSNumber numberWithInt:10]; int a =[num intValue]; // 转换回来
NSNumber *n = [NSNumber numberWithDouble:10.5]; double b = [n doubleValue]; // 转换回来
2.数据转为NSString
int a=20; NSString *str = [NSString stringWithFormat:@"%d", a]; //这将20转为@"20"即数据转为string NSLog(@"%d", [str intValue]); 3.快速转为NSNumber: 将各种基本数据类型包装成NSNumber对象 @10.5; @YES; @'A'; //注意:@"A"; 它是 NSString对象 将age变量包装成NSNumber对象 int age = 100; @(age); //或者[NSNumbernumberWithInt:age];
—NSDate
NSDate:OC中将日期也封装成一个NSDate类,是它是一个日期时间类.1.创建一个时间对象
NSDate *date = [NSDate date];
2.打印出的时候是0时区的时间(北京-东8区)
NSLog(@"%@", date);
3.表示从运行到此行代码时间5秒钟后的时间
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
4.从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
5.日期的格式
可以改变日期的格式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);
6.将字符转成日期
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)
—NSValue
NSValue:NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue。1.结构体转为OC对象
CGPoint p = CGPointMake(10, 10);
将结构体转为Value对象
NSValue *a = [NSValue valueWithPoint:p];
2.将Value对象转为对应的结构体
CGPoint p = [a pointValue]; NSArray *a 9b2a rray = @[a];
相关文章推荐
- 只会CSS还不够,LESS、SASS、BootStrap、Foundation一网打尽!
- #无私分享《传智播客2011版。net平台c#视频》全套哦30.7G
- Open Source Foundation
- 黑马程序员---Java面向对象编程思想小结
- 黑马程序员---java面向抽象/接口编程
- 黑马程序员---java单例设计模式
- 黑马程序员---java字符串常用类
- 黑马程序员宣传语征集大赛
- 黑马程序员-------关于今天的一个程序学习心得
- 黑马程序员----把Eclipse修改为黑色主题颜色方案
- c基础语法(一)---流程控制与函数
- C基础语法(二)---复杂数据类型(数组和字符串)
- C基础语法(三)---复杂数据类型(指针)
- OC基础语法(三)---核心语法(1)
- OC基础语法(四)---核心语法(2)
- OC基础语法(五)---内存管理
- OC基础语法(六)---内存管理(二)
- OC基础语法(七)---Foundation框架
- 黑马程序员
- 程序员常用英语大集合 http://bbs.itheima.com/thread-118950-1-1.html (出处: 黑马程序员IT技术论坛)