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