一、oc中的數組:NSArray 定義: NSArray *arrayName=[NSArray arrayWithObjects:obj1,obj2,obj3,obj4,nil];//數組是以nil空作為結束的標志 使用: for(int i=0;i<4;i++) { Object *obj=[arrayName objectAtIndex:i]; [obj functionName]; } 例如: //數組的使用 //定義四個Student類型的變量 並初始化 Student *stu1=[StudentstudentWithName:@"唐僧"andSex:YESandAge:23andAddress:@"大唐"]; Student *stu2=[StudentstudentWithName:@"悟空"andSex:YESandAge:23andAddress:@"花果山"]; Student *stu3=[StudentstudentWithName:@"八戒"andSex:YESandAge:23andAddress:@"高老莊"]; Student *stu4=[StudentstudentWithName:@"沙僧"andSex:YESandAge:23andAddress:@"流沙河"]; //數組的定義和初始化(數組是以nil空作為結束的標志的) NSArray *students=[NSArrayarrayWithObjects:stu1,stu2,stu3,stu4,nil];//定義一個數組名為 students元素類型全部為Student 元素個數為4的數組 //利用for循環使用數組中的元素 for (int i=0; i<4; i++) { //根據數組的索引取出相應的對象 Student *stu=[students objectAtIndex:i]; //調用取出對象的sayHi方法 [stusayHi]; } //數組中的元素可以是多種類型 //數組元素不能存放基本的數據類型(如int float..) //如果存放基本數據類型,要把它先轉換成NSNumber的對象 例如: NSArray *arrays=[NSArrayarrayWithObjects:stu1,@"張三",[NSDate date], [NSNumbernumberWithInt:20],nil];//定義了一個名為array的數組,該數組中包含4個元素,分別為Student、String、Date、Number類型 //注意:在打印引用型對象是,默認的是打印類的類型和內存地址,在.m文件中改寫description方法(相當於java中的toString方法),可以改變其輸出形式 在.m文件中改寫後的description方法 /** 在.m文件中重寫後的description方法 [不用在.h文件中定義接口 ] //重寫description方法 相當於java中的toString方法 -(NSString *)description//重寫description方法後,讓其輸出姓名(也可以是其他自定義的字符串等) { returnname; } */ //包含不同類型的數組的使用 for (int i=0; i<4; i++) { //根據數組的索引取出相應的對象 id arry=[arraysobjectAtIndex:i];//id為泛型 是指任意類型的對象 定義id泛型對象時不在變量前加* //直到賦值的時候才確定是什麼類型 NSLog(@"%@",arry); } NSLog(@"for-in的使用"); //for-in 的使用和java中的一樣,循環的次數依賴與數組元素的個數 for (id tempin arrays) { NSLog(@"%@",temp); } //NSArray的子類NSMutableArray為可變的數組 可以進行增刪改查 // NSMutableArray *mArray=[[NSMutableArray alloc]init]; NSMutableArray *mArray=[NSMutableArrayarrayWithObjects:stu1,@"aaa",@"abc",nil]; // //NSMutableArray是可變數組,是NSArray的子類,裡面的元素可以增刪改查 NSLog(@"數組的長度%ld",[mArray count]);//輸出數組的長度(元素的個數)調用count方法,采用長整型站位符 //向數組中添加元素 [mArrayaddObject:@"cccc"]; [mArray addObject:[NSNumbernumberWithBool:YES]]; NSLog(@"添加後的數組元素"); NSLog(@"%@",mArray); //刪除數組中的元素 [mArray removeObjectAtIndex:0];//刪除下標為0的元素即第一個元素 NSLog(@"刪除第一個元素後的數組元素"); NSLog(@"%@",mArray); //注:按住windows鍵和鼠標左鍵可以查看類的.h文件,以便於我們更加清楚的了解該類中的方法,更好的使用該類 //NSMutableArray中的擴展方法 // - (void)addObject:(id)anObject; // - (void)insertObject:(id)anObject atIndex:(NSUInteger)index; // - (void)removeLastObject; // - (void)removeObjectAtIndex:(NSUInteger)index; // - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 二、集合的使用 集合中只能存放對象類的元素,要想存放基本數據類型的元素,要先將其轉換為對象類再進行存放,集合中存放的數據元素可以是不同類型的和數組一樣 Set集合 //Set集合 //定義和初始化 NSSet *set=[NSSetsetWithObjects:@"aa",@"bb",@"cc",nil]; //set集合中的元素是無序的唯一存在的 相互獨立的長度是不可變的 //set集合的使用 NSLog(@"%@",set); NSLog(@"%@",[setanyObject]);//取出set裡面的所有元素 //Set集合的子類NSMutableSet類似於Array的子類是可變長度的集合 也可以增加刪除元素 //按住windows鍵和鼠標左鍵可以查看其中定義的方法來進行使用 三、字符串 Cocoa為我們准備了一個與字符串操作相關的結構體NSRange NSRange: ➢ 表示相關事物的范圍,包含兩個成員,一個是長整型location,表示起始位置,另外一個是長整型length表示長度 比如要得到一個起始位置為10,3個長度的范圍,它可以有三種方式創建: ➢ 第一種調用函數可以這麼寫: NSRange range =NSMakeRange (10,3); ➢ 第二種直接給成員賦值: NSRange range; range.location=10; range.length=3; ➢ 第三種應用C語言的聚合結構賦值機制: NSRange range ={10,3}; 字符串的使用:(如下) int main(int argc,const char * argv[]) { //一、字符串的創建 //第一種直接創建 NSString *str=@"zhangsan"; //創建空的字符串 NSString *str1=[[NSStringalloc]init]; NSLog(@"str=%@,str1=%@",str,str1); //依賴創建 str2相當於是str的指針 NSString *str2=[NSStringstringWithString:str];//str2依賴str,str釋放後,str2變空 NSLog(@"str2=%@",str2); //第四種重點 NSString *str3=[NSStringstringWithFormat:@"%@ love iPhone%d5.",str,5]; NSLog(@"%@",str3); //二、字符串的長度 NSLog(@"str3的長度是:%ld",[str3 length]); //三、字符串的比較 NSString *str4=[NSStringstringWithFormat:@"zhangsan"]; if(str==str4)//和java中一樣,采用==來判斷兩個字符串是否相等時,判斷的是地址是否相等,而不是內容是否相等 { NSLog(@"== 相等"); } if ([strisEqualToString:str4]) {//和java中的類似,判斷兩個字符串的內容是否相等,采用isEqualToString函數 NSLog(@"isEqualToString 相等"); } //四、字符串的大小比較 //采用 compare方法,返回枚舉類型[-1,0,1],NSOrderedAscending(1)升序,前者大於後者、NSOrderedSame(0)相等,前者等於後者、NSOrderedDescending(-1)前者小於後者 //compare從第一個字母開始往後比較,比較的是字母的ASC碼 NSString *str5=@"abc"; switch ([str4 compare:str5] ) { caseNSOrderedAscending: NSLog(@"大於"); break; caseNSOrderedSame: NSLog(@"等於"); break; caseNSOrderedDescending: NSLog(@"小於"); break; default: break; } //五、前綴 後綴 的判斷 //後綴的判斷用 hasSuffix函數返回bool類型 NSString *str6=@"IOS.doc"; if ([str6hasSuffix:@".doc"]) {//判斷str6是否是以.doc結尾 NSLog(@"這是一個word文檔"); } //前綴的判斷用 hasPrefix函數返回bool類型 NSString *str7=@"http://www.baidu.com"; if ([str7hasPrefix:@"http://"]) {//判斷str7是否以http://開頭 NSLog(@"這是一個網址"); } //六、查找子字符串 rangeOfString函數 //NSRange為一個結構體,在定義變量的時候不需要在變量前加* //NSRange包含兩個成員:location和length;其中localtion表示字符串的位置(一般都是從0開始的),length表示字符串的長度表示一個字符串的范圍 NSRange range=[str7 rangeOfString:@"www"];//定義一個結構體變量,並為其賦初值 if (range.location!=NSNotFound)//查找子字符串在父字符串中的位置range.location { NSLog(@"location:%ld,length:%ld",range.location,range.length); }else { NSLog(@"未找到字符串"); } //七、截取子字符串 NSLog(@"%@",[str7substringFromIndex:7]);//從位置為7的位置到最後(包含第七個位置) NSLog(@"%@",[str7substringToIndex:7]);//從開頭到第七個位置(不包含第七個位置) NSLog(@"%@",[str7substringWithRange:range]);//從range范圍截取字符串 //八、字符串的轉換 NSString *str8=@"123"; int num=[str8intValue];//將字符串str8轉換成int基本類型 NSLog(@"%d",num); NSLog(@"%@",[str7 uppercaseString]);//轉換成大寫 NSLog(@"%@",[str7 lowercaseString]);//轉換成小寫 NSLog(@"%@",[str7 capitalizedString]);//每句首字母大寫 //九、字符串的替換 //1、stringByReplacingOccurrencesOfString方法(全部替換) NSString *str9=@"2B青年aa,2B青年dd,2B青年ff,2B青年xx"; //將字符串str9中的“2B”替換成“文藝” NSLog(@"%@",[str9 stringByReplacingOccurrencesOfString:@"2B"withString:@"文藝"]); //2、stringByReplacingCharactersInRange方法(在一定范圍內替換) NSLog(@"%@",[str9 stringByReplacingCharactersInRange:NSMakeRange(0,2) withString:@"文藝"]);//將0~2范圍內的子字符串替換成目標字符串替換的長度可以不一樣 //十、字符串的切割 返回一個數組 NSArray *arr=[str9 componentsSeparatedByString:@","];//以“,”為界進行字符串的切割,將切割後的字符串放進arr數組中 NSLog(@"%@",arr); //十一、字符串的拼接拼接後的新字符並沒有改變原字符串中的內容 而是生成了一個新的字符串 // NSString *str8=@"123"; //第一種、直接在原字符串後加新字符串進行拼接 NSLog(@"%@",[str8stringByAppendingString:@"abc"]); //第二種、采用字符串格式符進行拼接 NSLog(@"%@",[str8stringByAppendingFormat:@"iPhone%d5",5]); //十二、可變字符串 NSMutableString NSLog(@"可變字符串"); // NSMutableString為NString的子類,繼承NSString所有得方法 NSMutableString *mstr=[[NSMutableString alloc]init];//定義一個空字符串 NSLog(@"%@",mstr);//輸出 //1、拼接字符串 與NSString不同的是 NSMutableString拼接字符串是在原字符串的基礎上拼接的,沒有生成新的字符串,而是改變了原來字符串的樣式 [mstr appendString:@"iphone5"];//普通拼接方式 NSLog(@"%@",mstr);//輸出 [mstr appendFormat:@"ipad%d",4];//format拼接方式 NSLog(@"%@",mstr);//輸出 //2、刪除字符串中的字符 刪除一個范圍 NSRange rang=[mstr rangeOfString:@"ipad"];//查找“ipad”所在的范圍 if(rang.location!=NSNotFound) { [mstr deleteCharactersInRange:rang]; } else { NSLog(@"未找到字符串,刪除失敗。"); } NSLog(@"%@",mstr); return 0; } 四、課後練習 int main(int argc, const char * argv[]) { //第一題:將Hello World and Sunshine 子復查unzhong的“World”替換為“iBokan” 兩種方式 NSString *str=@"Hello World and Sunshine"; NSLog(@"%@",str); NSLog(@"%@",[str stringByReplacingOccurrencesOfString:@"World" withString:@"iBokan"]); NSLog(@"%@",str); NSLog(@"%@",[str stringByReplacingCharactersInRange:NSMakeRange(6, 5) withString:@"iBokan"]); //第二題:求字符串“158”和“39”按十進制數值做差後的結構以字符串形式輸出 NSString *num1=@"158"; NSString *num2=@"39"; int n1=[num1 intValue]; int n2=[num2 intValue]; int result=n1-n2; NSString *jieguo=[NSString stringWithFormat:@"%d",result]; NSLog(@"%@",jieguo); //第二題可以縮寫為: NSLog(@"%d-%d=%@",158,39,[NSString stringWithFormat:@"%d",[@"158" intValue]-[@"39" intValue]]); return 0; }