iOS Foundation框架 -2.常用集合類簡單總結 – iPhone手機開發技術文章 iPhone軟體開發教學課程

Foundation框架中常用的類有:NSString、NSArray、NSSet、NSDictionary 以及它們對應的子類 NSMutableString、NSMutableArray、NSMutableSet、NSMutableDictionary,父類統一為不可變而子類可變,還包括NSDate、NSObject

 

可變和不可變的區別是對象內容的可變和不可變,子類既然是繼承父類那麼子類可以使用父類中的任意方法

 

1.NSString類的操作

 

使用NSString類的對象初始化方法創建字符串    

復制代碼

  // 創建無參數的字符串

    NSString *str2 = [[NSString alloc] initWithString:@"Jack"];

    

    // 創建帶參數的字符串

    NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d",10];

    

    // C字符串 轉換為 OC字符串

    NSString *str4 = [[NSString alloc] initWithUTF8String:"Rose"];

    

    // OC字符串 轉換為 C字符串

    const char c = [str4 UTF8String];

    

    // 讀取文件內容第一種方式:讀取桌面下 getWeather.xml 文件裡的所有內容

    NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/getWeather.xml" 

                     encoding:NSUTF8StringEncoding error:nil];

 

    // NSUTF8StringEncoding 適用於使用中文的編碼格式

    

    // 讀取文件內容第二種方式

    

    // URL:資源路徑 格式為:協議頭:// 比如本地文件的URL格式:file://     網絡文件的URL格式:https://    服務器文件的URL格式:ftp://    

  NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/getWeather.xml"]; 

  // 如果訪問網絡就可以定義:https://www.baidu.com

 

    NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    

    NSLog(@"/n%@",str6);

復制代碼

使用NSString類方法創建字符串

復制代碼

    // 創建無參數的字符串

    NSString *str2 = [NSString stringWithString:@"Jack"];

    

    // 創建帶參數的字符串

    NSString *str3 = [NSString stringWithFormat:@"age is %d",10];

    

    // C字符串 轉換為 OC字符串

    NSString *str4 = [NSString stringWithUTF8String:"Rose"];

    

    // 讀取文件內容第一種方式:讀取桌面下getWeather.xml文件裡的所有內容

    NSString *str5 = [NSString stringWithContentsOfFile:@"file:///Users/apple/Desktop/getWeather.xml" encoding:NSUTF8StringEncoding error:nil];

 

    // NSUTF8StringEncoding 適用於使用中文的編碼格式

    

    // 讀取文件內容第二種方式:讀取桌面下getWeather.xml文件裡的所有內容

    NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/getWeather.xml"];

    NSString *str6 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

復制代碼

  可以看出實現同一個功能NSString提供瞭對象方法和類方法兩種解決方式而類方法快捷方便,因此在實際開發中推薦使用類方法來操作字符串

 

 

 

將字符串寫入到一個文件裡

復制代碼

    // 給目標文件中寫入字符串,兩種寫入方式在寫入之前都會將文件中的內容全部清空後再寫入

    

    // 第一種寫入方式

    // atomically參數指寫入不成功時要不要停止

    [@"Java,iOS" writeToFile:@"/Users/apple/Desktop/getWeather.xml" atomically:YES encoding:NSUTF8StringEncoding error:nil];

    

    // 第二種寫入方式

    NSString *content = @"iOS,Java";

    // NSURL提供瞭直接定義本地URL的類方法

    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/getWeather.xml"];

    [content writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

復制代碼

 

 

2.NSMutableString類的操作

 

NSMutableString繼承自NSString那麼NSMutableString可以使用NSString類中的任意方法

NSMutableString提供瞭自己獨有的方法

復制代碼

    NSString *str = [NSString stringWithFormat:@"My age is 10 "];

    NSString *str2 = [str stringByAppendingString:@"11 12"];

    NSLog(@"%@",str2);      // 打印:My age is 10 11 12

    

    NSMutableString *mutalbeStr = [NSMutableString stringWithFormat:@"My age is 10 "];

    [mutalbeStr appendString:@"11 12"]; // appendString方法沒有返回值,說明是直接str字符串後面進行拼接

    NSLog(@"%@",mutalbeStr); // 打印:My age is 10 11 12

    

// 可以看出:NSString一旦定義瞭str字符串它本身就不可變瞭,雖然NSString類方法也提供瞭拼接的方法如stringByAppendString方法但是它返回的是一個新的字符串。而NSMutableString提供的拼接方法appendString方法是在原有的字符串上直接拼接它沒有返回值。這就是可變和不可變字符串的本質

 

復制代碼

    // NSMutableString 提供瞭刪除方法,比如說要刪掉上面可變字符串中的11有兩種方式:

    

    // 第一種 必須要清楚要刪除內容的location和length,11在整個字符串中的loc = 11 length = 2  (不推薦使用)

    //[mutalbeStr deleteCharactersInRange:NSMakeRange(13, 2)];

    

    // 第二種:先獲取要刪除內容的范圍,然後刪除范圍內的字符串

    NSRange range = [mutalbeStr rangeOfString:@"11"];

    [mutalbeStr deleteCharactersInRange:range];

    

    NSLog(@"%@",mutalbeStr); // 打印:My age is 10  12

復制代碼

復制代碼

 

 

2.OC集合類的操作

 

(1) OC集合類包括NSArray,NSSet,NSDictionary都是以面向對象的方式操作數組,而且OC數組不像C語言中的數組隻能存放同一種數據類型,它可以    存放任意類型的對象,但是不能存放非OC對象類型如基本數據類型int,struct,enum等

 

(2) OC數組是以對象的方式存在,因此在創建的時候需要為創建的對象前面加*

 

(3) NSArray數組一旦創建就決定瞭是不是可變,而且永遠是可變或不可變

 

(4) NSArray數組和子類NSMutableArray的基本操作

 

    // 使用NSArray的類方法arry創建個數組

    // 創建時定義為空數組,那麼array數組將永遠是空數組

    NSArray *array = [NSArray array];

 NSArray的常見操作:

復制代碼

    // 創建數組對象有兩種方式 

    // 第一種方式:

    NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];

    // 數組中包含瞭兩個NSString對象 nil是用來標識數組元素結束的標識

    // 因此OC數組中不能存放空對象

    NSArray *array1 = [NSArray arrayWithObjects:@"Jack",@"Rose", nil];

 

    // 第二種方式:(推薦使用)

    NSArray *array2 = @[@"Jack",@"Rose"];

 

    // 獲取數組的長度 array1.count;

    NSUInteger count = [array1 count];

    NSLog(@"%ld",count);

    // 訪問數組中的對象的兩種方式

    NSString *str1 = [array1 objectAtIndex:0]; // 數組中索引為1的對象,OC中提供的方法 返回:Jack

    NSString *str2 = array1[0];                // 編譯器特性其實還是轉為上面的形式來訪問 返回:Jack

復制代碼

    // 遍歷數組的三種方式

    // 第一種:

    for (int i = 0; i<array1.count; i++) {

        NSLog(@"%@",array1[i]); // 數組中存放的是對象可以用%@輸出

        if (i ==0) {

            break;

        }

    }

    

 

    // 第二種:將array1數組中的每個對象拿出來賦給obj然後依次打印

    for (id obj in array1) {    // id obj 代表數組中的對象

        // 獲取obj對象在數組中的索引

        NSUInteger index = [array1 indexOfObject:obj];

        NSLog(@"%ld–>%@",index,obj);

    }

    

 

    // 第三種:使用Block 每次從數組中遍歷一個元素後就傳遞給block,block也相應的執行一次

    // block中的id obj對應數組中的元素,NSUInteger idx對應數組中元素的索引 BOOL用來停止遍歷

    [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        

        NSLog(@"%ld–>%@",idx,obj);

        

        // 如果索引為0 立即停止遍歷

        if (idx ==0) {

            *stop = YES;

        }

    }];

復制代碼

復制代碼

 NSMutableArray的基本操作:

復制代碼

  // 創建可變數組

    NSMutableArray *mutableArray = [NSMutableArray array];

  

    // NSMutableArray *mutalbeArray2 = @[@"張三",@"李斯"];  註意:@[]返回的是不可變NSArray數組 這樣會報錯

  // 為可變數組增加任意對象

    Person *person = [[Person alloc] init];    

    [mutableArray addObject:person];

    [mutableArray addObject:@"Jack"];

    [mutableArray addObject:@"John"];

    // [mutableArray addObject:10]; 數組中不可以存放基本數據類型

    // 從數組中刪除指定的元素

    [mutableArray removeObject:@"John"];

    [mutableArray removeObjectAtIndex:0];

    // 將數組中的元素全部刪除

    [mutableArray removeAllObjects];

復制代碼

(5) NSSet數組和子類NSMutableSet的基本操作

 

NSSet和NSArray都是不可變數組,一旦創建就無法改變。NSSet是無序的集合簡單操作:

復制代碼

    // 創建NSSet集合

    NSSet *set = [NSSet set]; // 一旦創建為空永遠為空

    NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil];

    

    // 隨機獲取NSSet集合中的元素

    NSString *str = [set2 anyObject];

    NSLog(@"%@",str);

復制代碼

NSMutableSet的簡單操作:

復制代碼

    // 創建可變set集合

    NSMutableSet *mutableSet = [NSMutableSet set];

    

    // 為set添加集合

    [mutableSet addObject:@"Jack"];

    [mutableSet addObject:@"Rose"];

    

    // 刪除元素

    [mutableSet removeObject:@"Jack"];

復制代碼

 

 

(6) NSArray和NSSet數組的對比

 

都是可以存放任意類型的OC對象的集合,都不能存放基本數據類型

本身都是不可變的,但是子類都是可變的

NSArray是有序的集合,NSSet是無序的集合

(7) NSDictionary和NSMutableDictionary

 

NSDictionary和它的子類NSMutableDictionary都是以key/value的形式存在,NSDictionary本身為不可變集合

NSDictionary也是無序集合

字典集合中存儲的值是以鍵值對的形式存在,如果存在相同的key那麼後面key的值會被覆蓋。但是允許vaule的重復

NSDictionary的基本操作

復制代碼

復制代碼

    // 常見創建Dictionary集合的四種方式

    

    // 1.創建一個空的字典集合類型

    NSDictionary *dic = [NSDictionary dictionary]; // 一旦為空 永久為空

    

    // 2.創建隻有一組值的字典集合

    NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];

    

    // 3.創建多個值的字典集合

    NSArray *keys = @[@"name",@"address",@"e-mail"];

    NSArray *values = @[@"Jack",@"北京",@"jack@163.com"];

    NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];

    

    // 4.通過值/鍵的方式來創建

    NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:

                          @"Jack",@"name",

                          @"北京",@"address",

                          @"jack@163.com",@"e-mail",nil];

    

    // 5.類似於數組的創建方式 (推薦使用)

    NSDictionary *dic5 = @{@"name":@"Jack",

                           @"address":@"北京",

                           @"e-mail":@"jack@163.com"};

復制代碼

    // 取值:根據相應的Key取出對應的值

    NSString *name = [dic1 objectForKey:@"name"]; // 返回 Jack

    // 返回鍵值對的個數

    NSUInteger count = dic5.count; // 返回 4

復制代碼

    // 遍歷NSDictionary數組用兩種方式:

    // 第一種方式:

    // 獲取字典中所有的鍵

    NSArray *allKeys = [dic5 allKeys]; // 獲取的鍵在數組中是無序的

    

    for (int i = 0; i < dic5.count; i++) {

        NSString *key = allKeys[i];

        NSString *value = dic5[key];

        NSLog(@"%@–>%@",key,value);

    }

    

    // 第二種方式:將字典中的鍵值對傳遞給Block中的key和obj

    [dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

        NSLog(@"%@–>%@",key,obj);

     // 遍歷一次立即停止 *stop = YES;

    }];

復制代碼

復制代碼

 

 

NSMutableDictionary的基本操作

復制代碼

    // 創建可變字典

    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];

    // NSMutableDictionary *mutableDic2 = @{@"name",@"Rose",@"address",@"北京"}; 錯誤的寫法因為右邊返回的是不可變的字典

    // 為可變字典添加元素

    [mutableDic setObject:@"Rose" forKey:@"name"];

    [mutableDic setObject:@"北京" forKey:@"address"];

    // 移除

    [mutableDic removeAllObjects];

    [mutableDic removeObjectForKey:@"name"];

    // 打印

    NSLog(@"%@",mutableDic); // 輸出:address = "\U5317\U4eac"; name = Rose;     \U5317\U4eac 就是北京存儲的形式

復制代碼

 

 

(8) 設計一個通訊錄裡面包含瞭四個人的姓名、電話、地址

 

復制代碼

    NSArray *friends = @[

         @{@"name":@"張三",@"phone":@"13993214321",@"address":@"北京"},

         @{@"name":@"李斯",@"phone":@"13498766789",@"address":@"上海"},

         @{@"name":@"王武",@"phone":@"15898766789",@"address":@"天津"},

         @{@"name":@"趙柳",@"phone":@"18798766789",@"address":@"南京"}];

    

    // 獲取‘李斯’的通訊錄信息

    NSDictionary *dic = friends[1];

    NSLog(@"%@",dic);

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *