一.字符串
1. 查看类的基本信息 /* * 一个类由.h和.m文件组成 * .h: 声明他的属性与方法 .m: 具体的实现 * OC不开源:只能看到系统类的.h文件,不能看到系统类的.m文件 * 进入类的.h文件能要能找到以下信息 1. 类的父类 2. 类遵循哪些协议 3. 类所属框架 4. 类里面的方法 */ /* * 字符串类 * NSString:不可变字符串 对象确定后,不能够修改字符串的内容,也就是说不能对字符串进行增删改查操作 * NSMutableString:可变字符串 对象确定后,能够修改字符串内容,能够对字符串进行增删改查操作 */ 2. NSString不可变字符串 创建一个字符创常量 1.通过直接赋值,创建一个字符串常量 NSString *str1 = @"字符串1"; //通过初始化方法和便利构造方法创建一个空字符串对象 NSString *str2 = [[NSString alloc]init]; NSString *str3 = [NSString string]; //给空字符串对象赋值 str2 = @"字符串2"; str3 = @"字符串3"; 2.快速创建一个字符串 //通过带参数的init方法快速创建字符串 NSString *string4 = [[NSString alloc]initWithString:@"字符串4"]; //通过带参数的便利构造方法快速创建字符串 NSString *string5 = [NSString stringWithString:@"字符串5"]; 3.创建一个格式化的字符串 int a = 6; //通过带参数的便利构造方法创建格式化字符串,后面的格式,跟NSLog括号内的一样 NSString *string6 = [NSString stringWithFormat:@"字符串%d",a]; NSLog(@"字符串%d",a); //通过带参数的init初始化方法创建格式化字符串 NSString *sting7 = [[NSString alloc]initWithFormat:@"字符串%d",a]; 4.字符串的比较 NSString *string8 = @"ab"; NSString *string9 = @"abc"; /* * NSOrderedDescending: 代表string8>string9 * NSOrderedSame: 相等 * NSOrderedAscending:string8<sting9 */ //区分大小写的比较 NSComparisonResult resutl = [string8 compare:string9]; //不区分大小写的比较 NSComparisonResult result1 = [string8 caseInsensitiveCompare:string9]; //isEqualTostring比较字符串对象的内容是否相同,==比较两个字符对象的内存地址是否一样 BOOL isEqual = [string8 isEqualToString:string9]; 5.字符串的转换 NSString *string10 = @"aBcDeFg"; //uppercaseString 将字母转化成大写 NSString *upperTest = [string10 uppercaseString]; //lowercaseString 将字母转化成小写 NSString *lowerTest = [string10 lowercaseString]; //capitalizedString 将首字母变成大写,后面变成小写 NSString *capitalTest = [string10 capitalizedString]; 6.字符串的截取与拼接 NSString *string11 = @"hello iOS"; subtringToIndex表示从头截取到哪里 NSString *subToString = [string11 substringToIndex:5]; substringFromIndex表示从哪里开始截取到尾 NSString *subFromString = [string11 substringFromIndex:6]; NSRang规定一个返回,locationd代表从哪里开始截取,length代表截取多长 NSRange rang = {1,1}; substringWithRange表示按指定的范围截取 NSString *subRangString = [string11 substringWithRange:rang]; //通过length获取到字符串的长度 long strLeng = string11.length; NSString *string12 = @"hello"; stringByAppendingString拼接字符串 NSString *appendString = [string12 stringByAppendingString:@"你好"]; int b = 12; 格式化拼接字符串 NSString *formatAppendString = [string12 //stringByAppendingFormat:@"你好%d",b]; 字符串转数组 NSString *string13 = @"刘伟改变世界的人,是真的"; componentsSeparatedByString用特定字符分割字符串 NSArray *arry = [string13 componentsSeparatedByString:@","]; 3. NSMutableString 可变字符串 1.可变字符串强烈不建议直接赋值 NSMutableString *string14 = [NSMutableString stringWithString:@"字符串14"]; NSMutableString *string15 = [[NSMutableString alloc]initWithString:@"字符串15"]; 2.可变字符串的增->使原字符串改变 //appendString是对自身进行修改,如果方法没有返回值一般都是对自身进行修改 [string14 appendString:@"修改1"]; //appendFormat对自身进行格式化拼接 int c = 14; [string14 appendFormat:@" %d",c]; //insertString:atIndex 在字符串的指定位置插入内容 [string14 insertString:@"♦️" atIndex:3]; 3.可变字符串的删->删除原字符串的某些内容 //deleteCharactersInRange删除原字符串中指定区域的字符 NSRange rang1 = {5,2}; [string14 deleteCharactersInRange:rang1]; 4.可变字符串的改->修改原字符串的内容 NSRange rang2 = {7,4}; [string14 replaceCharactersInRange:rang2 withString:@"成功"]; 5.可变字符串的查->查找原字符串中是否有指定的字符 //containsString查找原字符串中是否有指定字符,并没有修改原字符 BOOL isHeart = [string14 containsString:@"♦️"];
二.数组
1.NSArrary 不可变数组 1.数组对象的创建 //Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray但是这些类只能存放OC对象类型的数据 NSArray *array5 = @[@"",@"",@""]; // @"5"等价于@5 NSArray *array1 = [NSArray arrayWithObject:@"one"]; NSArray *array2 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil]; NSArray *array3 = [NSArray arrayWithArray:array1]; NSLog(@"array1 : %@", array1); NSLog(@"array2 : %@", array2); NSLog(@"array3 : %@", array3); NSArray *array4 = [[NSArray alloc]initWithArray:array2]; NSLog(@"array4 : %@",array4); 2.获取数组中的元素个数以及访问数组元素 NSArray *array5 = [[NSArray alloc]initWithObjects:@"一只羊",@"两只羊",@"三只羊",nil]; long count = [array5 count]; NSLog(@"array5中元素的个数 = %ld",count); NSString *string1 = [array5 objectAtIndex:0]; NSString *string2 = array5[2]; NSLog(@"array5中的第一个元素是\n%@",string1); 3.追加数组中的内容 NSArray *array6 = [NSArray arrayWithObjects:@"盖伦",@"寒冰",nil]; NSArray *array7 = [array6 arrayByAddingObject:@"liulang"]; //数组可以直接输出 NSLog(@"array7 : %@",array7); 4.数组转字符串 NSArray *array8 = [NSArray arrayWithObjects:@"I",@"Love",@"You", nil]; NSString *string9 = [array8 componentsJoinedByString:@"❤️"]; NSLog(@"string9 : %@",string9); 5.判断数组中是否存在一个指定的对象 NSArray *array9 = [NSArray arrayWithObjects:@"爱美的人",@"爱吃的人",@"爱笑的人",@"爱唱歌的人",nil]; BOOL isContain = [array9 containsObject:@"爱玩游戏的人"]; NSLog(@"isContain :%d",isContain); 6.根据指定的对象返回索引下标、返回数组中最后一个元素 NSArray *array10 = [NSArray arrayWithObjects:@"mac",@"window",nil]; //索引元素位置 NSInteger index = [array10 indexOfObject:@"mac"]; NSLog(@"index = %ld",index); //输出最后一个字符串 NSString *lastObject = [array10 lastObject]; NSLog(@"lastObject of lastObject = %@",lastObject); 7.数组排序 NSArray *sortArray = @[@"b",@"c",@"d",@"z",@"r"]; //设置比较方法,升序 NSArray *resultArray = [sortArray sortedArrayUsingSelector:@selector(compare:)]; //能设置升序还是降序 NSArray *resultArray1 = [sortArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { return [obj1 compare:obj2]; } ]; 2. NSMutableArray(可变数组) 0.可变数组的赋值 NSMutableArray *mutableArray1 = [NSMutableArray arrayWithObjects:@"xiaohong",@"xiaoming",@"xiaohua",@"xiaoqiao",nil]; 1.新增 [mutableArray1 addObject:@"xiaolan"]; NSLog(@"新增后的结果 = %@",mutableArray1); 2.插入 [mutableArray1 insertObject:@"jiaodaozhuren" atIndex:1]; NSLog(@"插入后的结果 = %@",mutableArray1); 3.删除最后一个元素 [mutableArray1 removeLastObject]; NSLog(@"移除最后一位元素后的结果 = %@",mutableArray1); 4.删除指定的元素 [mutableArray1 removeObject:@"xiaoming"]; NSLog(@"删除指定元素后的结果 = %@",mutableArray1); 5.删除指定位置的元素 [mutableArray1 removeObjectAtIndex:1]; NSLog(@"删除指定位置的元素后的结果 = %@",mutableArray1); 6.批量删除 NSArray *deleteArray = [NSArray arrayWithObjects:@"xiaohua", @"xiaoqiao", nil]; [mutableArray1 removeObjectsInArray:deleteArray]; NSLog(@"批量删除后的结果 =: %@", mutableArray1); 6.替换元素 [mutableArray1 replaceObjectAtIndex:0 withObject:@"It is over"]; NSLog(@"replace: %@", mutableArray1); 7.遍历数组 [mutableArray1 addObjectsFromArray:deleteArray]; for (int index = 0; index<3; index++) { NSLog(@"最终数组里第%d个元素是 : %@",index+1,mutableArray1[index]); } 8.数组的遍历 NSArray *greatPersonArray = @[@"霍金",@"爱因斯坦",@"居里夫人",@"牛顿",@"爱迪生",@""]; //for(;;;)遍历数组 for(int index = 0;index<greatPersonArray.count;index++) { NSLog(@"第%d个伟人是%@",index+1,greatPersonArray[index]); } //for...in 快速遍历数组 /* * in左边: 放一个数组内容的引用,没有实例化的对象就叫做引用 * in右边: 放要遍历的数组 * 核心: 从头遍历指定数组,将每次遍历到的值给in左边的对象 * 当数组里面的元素被遍历完以后,for循环自动结束 */ for (NSString *str in greatPersonArray) { NSLog(@"快速遍历%@",str); }
三.字典
1.查看API找方法 /* * 判断指定字符串是否在字符串的头部 * 判断指定字符串是否在字符串的尾部 * 将数字型字符串转化为基本数据类型 */ NSString *testStr = @"123456789"; BOOL isPreFix = [testStr hasPrefix:@"12"]; BOOL isSuffix = [testStr hasSuffix:@"89"]; int testStrInt = [testStr intValue]; 2.创建一个数组,里面存放NSNumber类型的数据,通过for..in遍历该数组 //通过NSNumber封装基本数据类型 NSNumber *num1 = [NSNumber numberWithInt:1]; NSNumber *num2 = [NSNumber numberWithInt:2]; NSArray *numberArray = @[num1,num2,@(3)]; for (NSNumber *num in numberArray) { NSLog(@"%@",num); } 3.字典的基本知识 /* * 字典通过key/Value来存取值,数组通过下标值来存取 * 字典是无序的 * key/value 是成对出现的 * 格式:@{key:value,key:value} * 因为字典是通过key来存取值的,所以效率会比数组稍高 * key和vlue,不一定非得是字符串,也可以是其他对象,但一般都使用字符串 */ 4.NSDictiondary不可变字典 1.字典对象的创建 //通过直接赋值 NSDictionary *dict1 = @{@"name":@"花儿",@"age":@"18"}; //alloc init NSDictionary *dict2 = [[NSDictionary alloc]init]; //构造方法 NSDictionary *dict3 = [NSDictionary dictionary]; //初始化的时候给赋值,都用逗号分隔,key在后,值在前,系统会自动判断键值,给的参数要是双数 NSDictionary *dict4 = [[NSDictionary alloc]initWithObjectsAndKeys:@"18",@"age",@"小薇",@"name", nil]; //利用构造函数创建字典对象时给初始值 NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:@"1000",@"hurt", nil]; //将一个字典放到另一个字典中 NSDictionary *dict6 = [[NSDictionary alloc]initWithDictionary:dict5]; //通过读取存放字典数据的文件,来创建字典 NSDictionary *dict7 = [[NSDictionary alloc]initWithContentsOfFile:nil]; //将url中存放的字典放到创建的字典对象中 NSDictionary *dict8 = [[NSDictionary alloc]initWithContentsOfURL:nil]; 2.获取字典的值 NSDictionary *dict9 = @{@"where":@"教室",@"what":@"上课",@"how":@"坐着"}; dict9[@"what"]; [dict9 objectForKey:@"how"]; //通过方法count获取到字典中键值对的个数 long num = [dict9 count]; 3.获取到字典所有的键和所有值 //allkey获取到字典中所有的键 NSArray *allkeysArray = [dict9 allKeys]; //allvalue获取到字典中所有的值 NSArray *allValueArray = [dict9 allValues]; //通过遍历字典中的键,来遍历字典 for (NSString *key in allkeysArray) { NSLog(@"%@",dict9[key]); } NSString *temp = allkeysArray[0]; NSLog(@"%@",dict9[temp]); temp = allkeysArray[1]; NSLog(@"%@",dict9[temp]); temp = allkeysArray[2]; NSLog(@"%@",dict9[temp]); 4.枚举器访问 NSDictionary *dict10 = @{@"age":@"19",@"name":@"小花"}; //keyEnumerator 来获取到字典中所有的键,将所有的键放到一个容器中 objectEnumerator获取到字典中所有的值 NSEnumerator *result = [dict10 objectEnumerator]; //通过for...in遍历这个容器 for (NSString *key in result) { NSLog(@"%@",key); } NSString *temp; //result 通过nextObject方法依次获取到容器中的结果,一旦nextObject返回的结果为nil,就跳出循环 while (temp = [result nextObject]) { NSLog(@"高大上%@",temp); } 5.NSMutableDictionary 可变字典->工作中推荐直接使用这个 1. 给字典赋值简单方式 和 字典赋值复杂方式 给字典赋值简单方式 dict11[@"name"] = @"小伟"; dict11[@"age"] = @"12"; 给字典赋值复杂方式 [dict11 setValue:@"173" forKey:@"height"]; 2.创建指定元素个数的字典 //创建指定元素个数的字典,但如果赋值要超过这个数的话,字典会自动扩充容量 NSMutableDictionary *dict12 = [NSMutableDictionary dictionaryWithCapacity:1]; dict12[@"key1"] = @"value1"; dict12[@"key2"] = @"value2"; //setDictionary 重新给该字典赋值 [dict12 setDictionary:@{@"key3":@"value4"}]; 3.移除字典元素 //removeAllObjects 全部移除 [dict12 removeAllObjects]; //通过指定key来移除指定的元素 [dict12 removeObjectForKey:@"key3"]; //批量移除 [dict12 removeObjectsForKeys:@[@"key1",@"key2"]];
四.集合
1.集合的基本概念 /* * 集合:存放数据的容器 * 与数组的区别: 1. 集合是无序的 2. 集合不允许有重复的值 3. 集合也只能存放对象 */ 2.NSSet 不可变集合 1.集合的赋值和数组的转化 //init 方法 NSSet *set1 = [[NSSet alloc]init]; //构造方法 NSSet *set2 = [NSSet set]; //创建对象并赋初值 NSSet *set3 = [[NSSet alloc]initWithObjects:@1,@2,@3, nil]; NSArray *array = @[@"齐白石",@"郑板桥",@"达芬奇"]; //将数组转化集合 NSSet *set4 = [NSSet setWithArray:array]; //将一个元素放到新创建的集合中 NSSet *set5 = [NSSet setWithObject:@5]; 2.通过枚举器访问集合元素 //数组转化为集合 NSArray *painterArray = @[@"唐伯虎",@"齐白石",@"梵高"]; NSSet *paiinterSet = [NSSet setWithArray:painterArray]; NSArray *shiRenArray = @[@"唐伯虎",@"李白",@"杜甫"]; NSSet *shiRenSet = [NSSet setWithArray:shiRenArray]; //for循环遍历集合 for (NSString *temp in paiinterSet) { NSLog(@"画家=%@",temp); } //枚举器遍历集合 NSEnumerator *result = [shiRenSet objectEnumerator]; id temp; while (temp = [result nextObject]) { NSLog(@"诗人=%@",temp); } 3.判断两个集合是否有交集 //判断是否有交集 BOOL isIntersect = [paiinterSet intersectsSet:shiRenSet]; //判断前者是否是后者的子集 BOOL isSub = [paiinterSet isSubsetOfSet:shiRenSet]; 3. NSMutableSet 可变集合 1.创建指定元素个数的一个集合对象 NSMutableSet *set4 = [NSMutableSet setWithCapacity:1]; 2.给集合添加单个元素 [set4 addObject:@"朱元璋"]; 3.给集合批量添加元素 [set4 addObjectsFromArray:painterArray]; 4.移除集合中的一个元素 [set4 removeObject:@"朱元璋"]; 5.移除集合中的所有元素 [set4 removeAllObjects]; NSMutableSet *set8 = [NSMutableSet setWithObjects:@"1",@"2",@"3", nil]; NSMutableSet *set9 = [NSMutableSet setWithObjects:@"2",@"3",@"4", nil]; 6.获取到两个集合的并集最后赋值给set8 [set8 unionSet:set9]; 7.获取到两个集合的交集最后赋值给set8 [set8 intersectSet:set9]; 8.从一个集合中减去另一个集合,就是从集合中移除这两个集合的交集,最终赋值给set8 [set8 minusSet:set9]; 9. 给集合重新赋值 [set8 setSet:set9];