——Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練——–
一、NSNumber的使用
1、NSNumber的介紹和使用
NSArray和NSDictionary中隻能存放OC對象,不能存放int,float,double等基本資料類型。如果真想把基本資料放進數組或字典中,需要先将基本資料【包裝】成OC對象
NSNumber可以将基本資料類型包裝成對象,這樣就可以間接将基本資料類型存進NSArray和N
SDictionary中
2、使用
//NSNumber的使用
//【好處】可以把基本資料類型存放到 數組和字典中
//如何使用NSNumber
//1)int --->NSNumber
int a = ;
NSNumber *intObj = [NSNumber numberWithInt:a];
NSMutableArray *arr = [NSMutableArray arrayWithObject:intObj];
NSLog(@"%@",arr);
//2)float --->NSNumber
float b = f;
intObj = [NSNumber numberWithFloat:b];
[arr addObject:intObj];
NSLog(@"%@",arr);
//3)如果此時讓數組中的兩個元素相加
//顯然arr[0]+arr[1]是不行的
//step1:取出數組的元素
//step2:把元素轉換成基本資料類型的資料
NSNumber *ns1 = arr[];
NSNumber *ns2 = arr[];
int a1 = [ns1 intValue];
float b1 = [ns2 floatValue];
NSLog(@"a1 + b1 = %.2f",a1+b1);
//4)NSNumber簡寫方式
int c = ;
//@(變量名)把基本資料類型轉換成NSNumber對象
[arr addObject:@(c)];
//@(數值)把數值轉換成NSNumber對象
[arr addObject:@];
NSLog(@"%@",arr);
【列印結果】
2015-10-08 21:01:43.474 NSNumber的使用[8143:303] (
12
)
2015-10-08 21:01:43.477 NSNumber的使用[8143:303] (
12,
“12.2”
)
2015-10-08 21:01:43.478 NSNumber的使用[8143:303] a1 + b1 = 24.20
2015-10-08 21:01:43.479 NSNumber的使用[8143:303] (
12,
“12.2”,
100,
14
)
二、NSValue的介紹和使用
1、NSValue的介紹和使用
1)NSNumber是NSValue的子類,NSValue主要用來把指、CGRect結構體等包裝成OC對象,以便存儲。
2)一個NSValue對象是用來存儲一個C或者Objective-C資料的簡單容器。它可以儲存【任意類型的資料】,比如int、float、char,當然也可以是指pointers、structures 和objects 、ids。NSValue類的目标就是允許以上資料類型的資料結構能夠被添加到集合中,例如那些需要其他元素對象是的資料結構,如NSArray或者NSSet的執行個體。需要注意的是NSValue對象一直是【不可枚舉】的。
為了友善 【結構體】和NSValue的轉換,Foundation提供了一下方法将結構體包裝秤NSValue對象—–》存儲結構體到集合中
2、使用如下:
//建立一個結構體,儲存點
CGPoint p = CGPointMake(, );
//建立一個矩形
CGRect r = CGRectMake(, , , );
//建立一個size
CGSize s = CGSizeMake(, );
NSMutableArray *ma = [NSMutableArray array];
//[ma addObject:p];報錯,基本資料類型不能儲存到數組中
//1)valueWithPoint 将point結構體轉換成NSValue對象
NSValue *value = [NSValue valueWithPoint:p];
[ma addObject:value];
value = [NSValue valueWithRect:r];
[ma addObject:value];
value = [NSValue valueWithSize:s];
[ma addObject:value];
NSLog(@"%@",ma);
//2)将NSValue中的值去出來
NSValue *value2 = [ma lastObject];
NSSize ns = [value2 sizeValue];
NSLog(@"%@",NSStringFromSize(ns));
//3)把自定義的結構體存儲到NSArray中
typedef struct {
int year;
int month;
int day;
}myDate;
myDate d = {,,};
//[ma addObject:d];報錯,基本資料類型
//@encode(myDate)把myDate類型生成一個常量字元串描述
value2 = [NSValue valueWithBytes:&d objCType:@encode(myDate)];
[ma addObject:value2];
NSLog(@"%@",ma);
//4)把自定義結構體的值從數組中取出來
//getValue擷取值
myDate d2;
[value2 getValue:&d2];
NSLog(@"%d-%d-%d",d2.year,d2.month,d2.day);
【列印結果】
2015-10-08 21:28:46.822 NSValue的使用[8732:303] (
“NSPoint: {10, 19}”,
“NSRect: {{2, 2}, {2, 2}}”,
“NSSize: {2, 2}”
)
2015-10-08 21:28:46.827 NSValue的使用[8732:303] {2, 2}
2015-10-08 21:28:46.829 NSValue的使用[8732:303] (
“NSPoint: {10, 19}”,
“NSRect: {{2, 2}, {2, 2}}”,
“NSSize: {2, 2}”,
“”
)
2015-10-08 21:28:46.831 NSValue的使用[8732:303] 2014-12-31