一.字符串
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];