OC基础——Foundation框架之集合型类



集合类:可以装很多东西的类,NSArray、NSSet、NSDictionary都属于集合类。
NSArray:不可变OC数组
1> OC数组只能存放OC对象;
2> NSArray的创建

NSArray *array = [NSArray array];//创建出来的array永远是空数组。

NSArray *array2 = [NSArray arrayWithObject:@"whbsspu"];// 这个数组只能存放一个OC对象;

NSArray *array3 = [NSArray arrayWithObject:@"whbsspu",@"age is 23",nil];//把nil前面的所有东西都当做数组元素,nil不能省略。

NSArray *array4 = @[@"whbsspu",@"jack",@"rose"];// 快速创建一个NSArray对象,只要是数组元素都可以放进去,@[]返回值是NSArray是不可变数组。
3> 计算数组中元素个数:[数组名 count];
eg:[array3 count];
4> 访问数组内部的元素
eg:
array3[1];
[array objectAatIndex:1];(不常用)
5> 数组遍历
int main()
{
     Person *p = [[Person alloc]init];
     NSArray *array = @[p,@"whbsspu",@"jsck"];

    //方法1:for循环
    for(int i=0;i<array.count;i++)
   {
       NSLog(@"%@",array[i]);
   }
   
   // 方法2:快速遍历
   for(id obj in array)//其中id obj代表着数组里面的每一个元素。这句代码的作用是找出obj在数组中的位置。
  {
        NSLog(@"%@",obj);
  }

   //方法3:遍历每一次元素就调用一次block,并且把当前元素和索引位置当做参数传给block。
   [array enumerateObjectUsingBlock:
  ^(id obj,NSUInteger idx,Bool *stop)
  {
     NSLog(@"%ld,%@",idx,obj);
    //if( idx = 0){*stop = YES;}跳出循环。
  }
   ];
   }
NSMutableArray:可变数组
1> 可变数组的创建
NSMutableArray *array = [NSMutableArray array];//空数组。

NSMutableArray *array2 = [NSMutableArray arrayWithObject:@"whbsspu",@"jack",nil]; 
注意错误写法:
[NSMutableArray *array = @[@"whbsspu",@"jsck"];//这种写法只能用于不可变数组的创建。

2> 添加元素

[array addObject:[[Person alloc]init]];

[array addObject:@"whbsspu1"];
3> 删除元素
[array removeAllObjects];//删除所有数组元素。

[array removeObject:@"whbsspu"];

[array removeObjectAtIndex:0]//删除0位置上的元素
4> 打印数组
NSLog(@"%@",array);

NSLog("%ld",array.count);
NSSet:无序存放对象,不可变
int main()
{
    NSSet *s = [NSSet set];//创建一个空的eset;
    NSSet *s1= [NSSet setWithObject:@"whbsspu",@"jsck",nil];
    NSString *str = [s1 anyObject];//随机取出任何一个元素。
    NSLog(@“&@”,str);
    NSLog("%ld",s1.count);
}
NSMutableSet:无序存放对象,可变
int main()
{
    NSMutableSet *s = [NSMutableSet set];
    [s addObject:@"whbsspu"];//添加元素;
    [s removeObject:(id)];//删除元素
}

NSSet和NSArray的对比

相同点:
1> 都是集合,都能存放多个OC对象;
2> 只能存放对象,不能存放非OC对象类型;
3> 本身都不可变,但都有一个可变的子类。

不同点:
NSArray是有顺序的,NSSet是无序的。

NSDictionary(字典)
1> 字典里存放的都是键值对(key——>value),且没有顺序。
eg:

NSDictionary *dic = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];//根据索引keyname可以找到Jack这个值。

id obj = [dic objectForKey:@"name"];//取出字典里的值。
2> 创建多对索引
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"whbsspu",@"上海"];
NSDictionary *dict = [NSDictionary dictionaryWithObject:objects forkeys:keys];
id obj = [dict objectForKey:@"name"];//输出whbsspu
3> 快速创建
NSDictionary *dict = @[@"name":@"whbsspu",@"address":@"上海"];
//访问
id obj = dict[@"name"];
NSLog(@"%@",obj);//输出whbsspu
4> dict.count 返回的是键值对的个数。

NSMutableDictionary:可变字典

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对
[dic SetObject:@"whbsspu"forkey:@"name"];
[dic setObject:@"上海"forkey:@"address"];
/*
  注意:1>字典里面的数据没有顺序之分;
2>如果再增加一条:
[dic setobject"@"jack" forKey:@"name"];则会将之前的whbsspu覆盖掉,因为字典里面不能有重复的键值。
*/
1> 移除键值对:[dic removeObjectForKey:(id)];
2> 字典的遍历:
//方式1
NSArray *keys = [dict allKey];
for(int i=0;i<dict.count;i++)
{
    NSString *key = key[i];
    NSString *object = dict[key];
}
//方式2
[dict enumerateKeysAndObjectUsingBlock:^(id key,id obj,BOOL *stop)
{
    NSLog(@"%@ %@",key,obj );
}];
NSNumber
1>作用:将基本数据类型包装成对象。
NSNumber *n =[NSNuber numberWithDouble:10.5];//将基本数据类型转化成对象;
double d = [n doubleValue];//将对象转成基本数据类型
2> 将各种数据类型转换成字符串
@10 //将10包装成NSNumber对象;
@'A' //将字符A包装成NSNumber对象;
@"A" //NSString对象

注意:

int age = 21;
@age;//会报错,会误认为是关键字;
@(age);//将age变量包装成NSNumber对象
3> NSNumber之所以能包装基本数据类的对象,是因为继承了NSValue。
4>将结构体包装成OC对象
CGPoint  p = CGPiontMaker(10,10);
//将结构体转成value对象
NSValue *value = [NSValue valueWithPoint:p];
NSArray *array = @[value];//将value转换成相应的结构体。
NSDate
作用:用来表示时间;
NSDate *date = [NSDate date];//创建一个时间 变量(写这行代码时的时间)
NSLog(@"%@",date);//打印出来的是0时区的时间。
显示日期:
NSDate *date = [NSDtae date];//如果想让时间显示在屏幕上,必须先转成字符串。
//日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formater.dateFormate = @"yyyy-MM-dd HH:mm:ss";//时间格式如:2014-11-20 17:56:34
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@",str);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值