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