iOS Foundation框架 利用NSNumber和NSValue將非OC對象類型數據存放到集合

1.Foundation框架中提供了很多的集合類如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary但是這些類只能存放OC對象類型的數據
 
2.如果要存放基本數據類型,必須先將基本暑假類型包裝成對象類型然後再用集合類進行存儲,OC中提供的包裝類是NSNumber,NSValue。其中NSNumber繼承於NSValue。
 
3.NSNumber主要針對於基本數據類型的包裝,NSValue主要針對結構體進行包裝
 
4.將包裝成NSNumber或NSValue對象類型後存放在數組中,然後從集合類中取出NSNumber、NSValue對象再轉換成爲基本數據類型
 
5.NSNumber的基本使用
 
複製代碼
複製代碼
  
    // 1.將int基本類型包裝成NSNuber對象類型
    NSNumber *ageNum = [NSNumber numberWithInt:10];
    
    // 2.將包裝後的對象存放到字典集合中
    NSDictionary *dic = @{@"name":@"Jack",@"age":ageNum};
    
    // 3.取出NSNumber對象
    NSNumber *ageNum2 = dic[@"age"];
    
    // 4.再將age對象轉換稱爲基本數據類型int
    int age = [ageNum2 intValue];
    
    NSLog(@"%d",age);   // 輸出 10
複製代碼
 
複製代碼
    // NSNumber提供了很多將基本數據類型轉換稱爲NSNumber對象類型的方法 簡單舉例
    NSNumber *intNum = [NSNumber numberWithInt:20];
    NSNumber *doubleNum = [NSNumber numberWithDouble:20.5];
    NSNumber *floatNum = [NSNumber numberWithFloat:98.98787];
    NSNumber *boolNum = [NSNumber numberWithBool:YES];
    
    // 對應的轉換稱爲基本數據類型的方法
    int a = [intNum intValue];
    double b = [doubleNum doubleValue];
    float c = [floatNum floatValue];
    BOOL d = [boolNum boolValue];
    
    // NSString對象也可以轉換稱爲int
    NSString *str = @"20";
    int e = [str intValue]; // 輸出 20
複製代碼
  可以看出雖然NSNumber提供了很多將基本數據類型轉換成爲NSNumber對象的方法,但是這樣寫起來太麻煩,Xcode編譯器新特性支持 @[(基本數據類型)]方式,可以直接將基本數據類型轉換稱爲NSNumber對象類型。如下代碼:
 
 
 
複製代碼
    // 成績
    char score  = 'A';
    NSArray *student = @[
      @{@"name": @"Jim", @"age":@20, @"height":@175.5, @"weight":@60.5, @"score":@(score)},
      @{@"name": @"John", @"age":@22, @"height":@179.8, @"weight":@67.2, @"score":@(score)},
      @{@"name": @"Jack", @"age":@21, @"height":@180.0, @"weight":@70, @"score":@(score)}
        ];
  // 可以看出將int,double類型在直接轉換就是在前面加@,如果是變量就用()將變量括起來
複製代碼
複製代碼
6.NSValue的基本使用
 
複製代碼
    // 創建點座標結構體
    CGPoint point = CGPointMake(20, 20);
    
    // 將結構體轉換成爲NSValue對象
    NSValue *pointValue = [NSValue valueWithPoint:point];
    
    // 將NSValue對象存放到數組中
    NSArray *array = @[pointValue];
    
    // 從數組中取出pointValue對象
    NSValue *value = array[0];
    
    // 將NSValue對象轉換成爲結構體
    CGPoint point2 = [value pointValue];
    
    // 輸出:轉換成基本類型結構體point2的值:
    // 第一種方式:將結構體先轉換爲字符串然後打印
    NSString *str = NSStringFromPoint(point2);
    NSLog(@"%@",str); // 輸出 {20,20}
    // 第二種方式:依次取出對應的值打印
    // NSLog(@"%f %f",point2.x,point2.y); 輸出 20.000000 20.000000
發佈了74 篇原創文章 · 獲贊 3 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章