黑马程序员- IOS学习笔记-Foundation框架集合类、NSNumber、NSDate

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
NSArray
不可变数组,只能存放OC对象,不能存放非OC对象

数组创建:
// 这个array永远是空数组,需要在创建的时候进行初始化
NSArray *array = [NSArray array];
// 初始化单个数组元素
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// 初始化多个数组元素,nil是数组元素结束的标记
NSArray *array3= [NSArray arrayWithObjects:@"jack",@"rose",nil];
// 快速创建数组 用@[];
NSArray *array4 = @[@"jack",@"rose",@"23423"];

array3.count : 数组元素个数

数组访问:
// 通过索引获取数组元素信息
[array3 objectAtIndex:1];
// 编译器特性,会自动转换为objectAtIndex
array3[0];

数组遍历:
Person *p = [[Person alloc] init];
NSArray *array = @[p,@"rose",@"jack"];
1、利用for循环进行循环遍历
for (int i = 0; i<array.count; i++)
{
    NSLog(@"%@",array[i]);
}
 2、利用for  in 遍历,缺点是没有数组下标
for (id obj in array) // 每次从数组中获取一个元素给obj
{
    // 找出obj元素在数组中的位置
    NSUinteger i = [array indexOfObject:obj];
    NSLog(@"%ld - %@",i,obj);
}

3、利用block快速遍历
[array enumerateObjectUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传递给block
^(id obj, NSUinteger idx, BOOL *stop)
{  // *stop YES表示终止遍历数组
    NSLog(@"%ld - %@",idx,obj);
}];

NSMutableArray
可变数组,只能存放OC对象,不能存放非OC对象

数组创建:
// 这个array数组可以在之后添加元素
NSMutableArray *array = [NSMutableArray array];

// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];

// 删除元素
// 删除所有数组元素
[array removeAllObjects];
// 删除指定的对象
[array removeObject:@"jack"]; // 根据数组元素删除
[array removeObjectAtIndex:2]; // 根据索引删除

错误写法:
// 数组不允许放空值
[array addObject:nil];
// 可变数组不能用不可变数组赋值,经典错误,调用了一个不可用方法
NSMutableArray *array = @[@"jack",@"rose"];
[array addObject:@"jim"]; // 系统调用的时候会转换成真实数据类型,不可变数组

NSSet
不可变集合,只能存放OC对象,不能存放非OC对象

集合创建:
// 这个s永远是空集合,需要在创建的时候进行初始化
NSSet  *s= [ NSSet  set];
// 初始化单个集合元素
NSSet  *s2= [ NSSet  setWithObject:@"jack"];
// 初始化多个 集合 元素,nil是 集合 元素结束的标记
NSSet  *s3= [ NSSet  setWithObjects:@"jack",@"rose",nil];

s3.count : 集合元素个数

集合访问:
// 随机拿出一个元素
NSString *str = [s3 anyObject];
NSLog(@"%@",str);

NSMutableSet
可变集合,只能存放OC对象,不能存放非OC对象

集合创建:
// 这个可变集合可以在之后添加元素
NSMutableSet *s= [NSMutableSet set];

// 添加元素
[s addObject:[[Person alloc] init]];
[s addObject:@"jack"];

// 删除元素
[s removeObject:@"jack"]; // 删除指定对象
[s removeAllObjects];    // 删除所有对象


NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、struct、enum等 共同体)
* 本身都不可变,都有一个可变的子类

2> 不同点
* NSArray有顺序,NSSet没有顺序


NSDictionary
不可变字典,只能存放OC对象,不能存放非OC对象,以键值对形式存放数据

字典创建:
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

// 利用数组创建字典
NSArray *keys = @[@"name",@"address"];
NSArray *objects= @[@"jack",@"北京"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKey:keys];

// 键值对形式存放多个元素,太啰嗦
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address",
@"12312",@"qq", nil ];

// 简洁明了符合我们开发习惯,建议用此种写法
NSDictionary *dict4 = @{ @"name" : @"jack", @"address" : @"北京" };

字典访问:
// 根据键名寻找对应的值
id obj = [dict4 objectForKey:@"name"]; // 取得jack
// 建议写法,类似于数组
id obj1 = dict[@"name"];

dict4 .count : 键值对的个数

NSMutableDictionary 
可变字典,只能存放OC对象,不能存放非OC对象

NSMutableDictionary *dict= [ NSMutableDictionary  d ictionary ];

// 添加键值对
[ dict  setObject:@"jack" forKey:@"name"];
[ dict   setObject :@"北京" forKey:@"address"];
// 多次给一个name赋值会覆盖之前的值
[ dict  setObject:@"rose" forKey:@"name"];

// 移除键值对
[dict removeObjectForKey:@"name"]; // 删除指定对象


错误写法:
// @{}表示不可变字典找不到setObject方法
NSMutableDictionary *dict = @{@"name" : @"jack"};
[dict setObject:@"rose" forKey:@"name"];

字典遍历:
NSDictionary *dict = @{@"name" : @"jack",@"qq" : @"12312"};
1、利用for循环进行循环遍历
NSArray *keys = [dict allKeys]; // 取得字典中的所有键
for (int i = 0; i<dict.count; i++)
{
    NSString *key = keys[i];
    NSString *object = dict[key];
    NSLog(@"%@===%@",key, object);
}
 
2、利用block来进行遍历
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
    NSLog(@"%@===%@",key , obj);
} ];

集合总结:
1、NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1,obj2];
* 快速访问元素: 数组名[i]

2、NSSet\NSMutableSet
* 无序

3、NSDictionary\NSMutableDictionary
* 无序
* 快速创建: @{key1 : value1, key2 : value2};
* 快速访问元素: 字典名[key];

NSNumber
把基本数据类型转换为Number类型
// 把double类型转换为number
NSNumber *n = [NSNumber numberWithDouble:10.5];

// 把number类型转换为基本数据类型
double d = [n doubleValue];

字符串和基本数据类型转换
int a = 20;
NSString *str = [NSString stringWithFormat:@"%d",a];
NSLog(@"%d", [str intValue]);

// 快速包装对象
将各种基本数据类型包装成NSNumber对象

@20;  // 整数
@10.3; // 小数
@YES; // 布尔
@'A'; // 字符 NSNumber对象
@"A"; // NSString对象

// 将多个人的信息放在数组中,用NSNumber包装对象
NSArray *array = @{
@{@"name" : @"jack", @"age" : @20},
@{@"name" : @"rose", @"age" : @25},
@{@"name" : @"jim", @"age" : @27},
};

NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue.
NSNumber只能包装数值。
NSValue能包装任何对象:比如结构体、枚举等

// 结构体——>OC对象
CGPoint p = CGPointMake(10,10);
// 将结构体转为value对象
NSValue *value = [NSValue vauleWithPoint:p];

// 将value转为对应的结构体
[value pointValue];

//数组中存放包装后的结构体
NSArray *array = @[value];

NSDate
创建时间
// 默认打印格林尼治时间
NSDate *date = [NSDate date];
NSLog(@"%@",date);
// 返回date 5秒后的时间给date2
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];

时间格式化
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 = @"2014/8/8 18:22";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";

NSDate *date = [formatter dateFromString:time];

NSLog(@"%@", date);
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值