OC--分类--数组--SEL--字典
-----分类--------
扩充类的功能:继承:要增加新类
分类(类别):不用增加新类
格式:@interface 类名(分类的名称)
方法的声明
@end
@implementaion 类名(分类的名称)
方法的实现
@end
注意事项:1.类别里面只能写方法 2.类别的名称写在类名后面的()里面
作用:1.扩充系统类,增加类的功能。
2.扩充现有类,增加现有类的功能,将复杂的功能进行分组,分别放入不同的类别里面,达到条理清晰,增加可读性,操作性。
特点:类别里面的方法在使用的时候与本类中的方法同
使用:1.创建分类
2.在要使用分类方法的文件中引入分类的头文件
3.用分类所在的类直接调用分类的方法即可
--------------- 匿名分类--------
格式:@interface 类名()
成员变量的声明//私有的成员变量
方法的声明//私有的
@end
匿名分类的实现放在原类的实现里面
注意:1.类名后面的()里为空 2.匿名分类的里面可以声明成员变量
使用:放在。m文件里面,实现文件的上面
作用:扩充类的功能,声明一些私有的成员变量及方法
----------- 数组---------
数组 : 与c的数组的区别
定义:c的数组:存储的时相同的简单数据类型的有序集合
oc的数组:存储的是相同或不同的对象类型的有序集合。
区分: c的数组 oc的数组:
c的数组是简单数据类型 oc的数组是对象
简单数据类型 对象
相同的 相同或不同
都是有序的 有序的
oc数组的分类:可变 数组和不可变数组
---------不可变数组------
---创建
1.创建空的
NSArray *array1 = [NSArray array];
2.通过对象方法创建
NSArray *array2 = [[NSArray alloc]initWithObjects:@"11",@"22",@"33", nil];
通过其他的数组创建
NSArray *array3 = [[NSArray alloc]initWithArray:array2];
3.通过类方法
NSArray *array4 = [NSArray arrayWithArray:array2];
NSArray *array5 = [NSArray arrayWithObjects:@"44",@"55",@"66", nil];
NSArray *array6 = [NSArray arrayWithObject:@"yige"];
4.简便方法
//[]里面是数组元素,
NSArray *array7 = @[@"88",@"99"];
-------取值---------
--取一个值
注意:不要越界
NSString *string = [array5 objectAtIndex:1];
NSString *string1 = array5[1];
//取多个值
//<#(NSIndexSet *)#> 是一个索引集合类,可以进行索引的设置
//包含数组的0,1两个索引值
NSIndexSet *set = [[NSIndexSet alloc]initWithIndexesInRange:NSMakeRange(0, 2)];
NSArray *subArray = [array5 objectsAtIndexes:set];
NSLog(@"subArray:%@",subArray);
--普通遍历
for (int i = 0; i< [array5 count]; i++) {
NSLog(@"%@",array5[i]);
}
--快速遍历
//原理:从 in 后面的数组中逐一的取出元素,赋给 in 前面的对象指针
for (NSString *string in array5) {
NSLog(@"%@",string);
}
--判断数组中是否包含某个元素
BOOL isExt = [arrayCar containsObject:car1];
--------可变数组-----------------
可变数组 继承自不可变数组
--创建
1、空可变数组
NSMutableArray *mutArray1 = [[NSMutableArray alloc]initWithCapacity:10];
//这样不行,创建的还是不可变数组
//NSMutableArray *mutArray2 = @[@"11",@"33"];
NSMutableArray *mutArray2 = [[NSMutableArray alloc]initWithArray:@[@"11",@"22"]];
---------增,删,改,查
---增
1、增加一个
//总计:都是在最后增加
[mutArray2 addObject:@"33"];
NSLog(@"mutArray2:%@",mutArray2);
2、添加很多个
[mutArray2 addObjectsFromArray:arrayCar];
3、中间增加(指定索引)
[mutArray2 insertObject:@"88" atIndex:1];
注意:前面数组的元素个数与索引的元素个数要相等
NSArray *array10 = @[@"77"];
NSIndexSet *set2 = [[NSIndexSet alloc]initWithIndex:3];
[mutArray2 insertObjects:array10 atIndexes:set2];
---删除
1、删除最后一个元素
[mutArray2 removeLastObject];
2、按照指定位置删除
[mutArray2 removeObjectAtIndex:2];
3、删除所有同名的元素
[mutArray2 removeObject:@"88"];
4、删除指定范围内的同名元素
[mutArray2 removeObject:@"88" inRange:NSMakeRange(0, 5)];
注意:原数组中会讲子数组的在大数组中有的元素删除,没有的不管,没有顺序
NSArray *array20 = @[@"11",@"77",@"222",@"88"];
[mutArray2 removeObjectsInArray:array20];
---改
[mutArray2 setArray:arrayCar];
---查 遍历
//排序(冒泡排序)
NSMutableArray *mutArray3 = [[NSMutableArray alloc]initWithArray:@[@"44",@"22",@"55",@"11",@"33"]];
//降序
//记住:比较字符串的时候一定要用方法
for (int i = 0; i<[mutArray3 count]-1; i++) {
for (int j = 0; j<[mutArray3 count]-i-1; j++) {
if ([mutArray3[j] compare:mutArray3[j+1]] == NSOrderedAscending) {
//将两个元素位置交换 交换方法
[mutArray3 exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}}}
---替换的方法
//第一个range是大范围 第二个是需要替换的范围 array:需要替换成的数组
//注意:第二个range的范围要在第一个的内部
[mutArray3 replaceObjectsInRange:NSMakeRange(0, 3) withObjectsFromArray:@[@"00"] range:NSMakeRange(0, 1)];
//分割
NSString *normalString = @"12#3452#78#";
//1以分割字符串整体进行分割
NSArray *newArray = [normalString componentsSeparatedByString:@"#"];
NSLog(@"newArray:%@",newArray);
---NSCharacterSet 字符集合
//注意:在原字符串动中有有分割字符串
//2将字符#存入set5
NSCharacterSet *set5 = [NSCharacterSet characterSetWithCharactersInString:@"#"];
//将字符集2#存入set6
NSCharacterSet *set6 = [NSCharacterSet characterSetWithCharactersInString:@"2#"];
NSArray *newArray1 = [normalString componentsSeparatedByCharactersInSet:set6];
注意:不可变数组不能进行删除操作
NSMutableArray *newmutArray1 = [[NSMutableArray alloc]initWithArray:newArray1];
//删除数组中的所有空元素
[newmutArray1 removeObject:@""];
//数组元素合成字符串
//参数代表合成字符串后,以参数的合成字符串将数组的原个元素隔开
NSString *stringJoin = [newmutArray1 componentsJoinedByString:@""];
//数组拼接成数组
//将 @“I” @“Love” @“You”拼接成 @“I Love You”
NSArray *arrayJoin1 = @[@"I",@"Love",@"You"];
NSString *stringJoin1 = [arrayJoin1 componentsJoinedByString:@" "];
//用可变数组保存车的信息
Car *car11 = [[Car alloc]initWithColor:ColorWithRed andName:@"baoma"];
Car *car22 = [[Car alloc]initWithColor:ColorWithWhite andName:@"kaidilake"];
Car *car33 = [[Car alloc]initWithColor:ColorWithGolden andName:@"falali"];
NSMutableArray *carMutArray = [[NSMutableArray alloc]init];
//将元素对象添加到数组
[carMutArray addObject:car11];
[carMutArray addObject:car22];
[carMutArray addObject:car33];
------NSNumber------
作用:将简单数据转化成对象 因为在OC的数组和字典等中存储的都是对象
int weight = 40;
NSNumber *intNum = [[NSNumber alloc]initWithInt:weight];
NSArray *arr = @[intNum];
NSNumber 与 int之间的转化
int nowInt = [intNum intValue];
-------SEL-----------
专门存储方法的数据类型 格式:@selector(方法)
容错处理:
SEL sel1= @selector(eat:);
if([dog respondsToSelector:sel1]){[dog performSelector:sel1];}
---数组的排序
//降序
-(BOOL)isYoungerThanotherStudent:(Student *)student{
//比较条件
return self.age < student.age;
}
[myClass.students swortUsingSelector:@selector(isYoungerThanotherStudent:)];
-------------字典-----------
字典:是对象,是一种存储数据的对象
形式:键(key)-值(value)对 的形式保存数据,字典没有顺序之说。
分类:可变字典,不可变字典
-----不可变字典
创建
1.空的
NSDictionary *dictionary1 = [NSDictionary dictionary];
2.通过对象方法
//一般key都是字符串
注意:字典也是以nil结尾
NSDictionary *dic2 = [[NSDictionary alloc]initWithObjectsAndKeys:@"apple",@"1",@"orange",@"2", nil];
//objects:所有的值 forKeys:所有的键(key)
NSDictionary *dic3 = [[NSDictionary alloc]initWithObjects:@[@"apple",@"orange"] forKeys:@[@"1",@"2"]];
3、类方法
NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:@[@"apple",@"orange"] forKeys:@[@"1",@"2"]];
添加一个元素
NSDictionary *dic5 = [NSDictionary dictionaryWithObject:@"apple" forKey:@"1"];
1、快速创建
//@{键:值,键:值}
NSDictionary *dic6 = @{@"1": @"apple",@"2":@"orange"};
2、取元素
NSString *string = [dic3 objectForKey:@"1"];
2.1、取所有的key
NSArray *keys = [dic3 allKeys];
2.1、取所有的value
NSArray *values = [dic3 allValues];
3、遍历
for (int i = 0; i<[dic3 count]; i++) {
NSString *key = [NSString stringWithFormat:@"%i",i+1];
NSLog(@"%@",[dic3 objectForKey:key]); }
3.1、快速遍历
//in前面是key
for (NSString *key in dic3) {
NSLog(@"%@",[dic3 objectForKey:key]); }
----例子
通讯录
张三 12345 男
李四 234344 女
王五 08909 男
NSDictionary *dic7 = @{@"张三":@[@"12345",@"男"],
@"李四":@[@"234564",@"女"],
@"王五":@[@"08909",@"男"]
};
for (NSString *key in dic7) {
//快速取值:dic7[写键]
NSArray *array = dic7[key];
NSLog(@"%@的电话是%@,性别是:%@",key,array[0],array[1]);
}
------------------------可变字典
//创建 空可变字典
NSMutableDictionary *mutDic1 = [[NSMutableDictionary alloc]initWithCapacity:20];
//操作
1、增
[mutDic1 addEntriesFromDictionary:dic7];
1.1、增加一个
[mutDic1 setObject:@"banana" forKey:@"55"];
2、删
[mutDic1 removeObjectForKey:@"55"];
2.1、删多个
[mutDic1 removeObjectsForKeys:@[@"1",@"2"]];
2.2删全部
[mutDic1 removeAllObjects];
3、改
[mutDic1 setObject:@"pair" forKey:@"55"];
4、查 --遍历