標籤:
NSNumber是NSValue的子類,前者只能封裝數字,後者可以封裝任意值。NSArray、NSDictionary只能儲存OC對象,不能儲存結構體。因此,如果想要在NSArray、NSDictionary裡放結構體,可以曲線救國,將結構體封裝成OC對象,再放到NSArray、NSDictionary等集合類中。
void value() { CGPoint point = CGPointMake(10, 10); // 將結構體變數封裝成一個對象 NSValue *value = [NSValue valueWithPoint:point]; NSMutableArray *array = [NSMutableArray array]; // 添加value [array addObject:value]; // 取出當時放進去的value NSValue *value1 = [array lastObject]; CGPoint point1 = [value1 pointValue]; BOOL result = CGPointEqualToPoint(point1, point); NSLog(@"result=%i", result);}typedef struct { int year; int month; int day;} Date;void value2() { Date date = {2013, 4, 7}; // void *代表任何指標 // 這裡要傳結構體的地址&date // 根據結構體類型產生 對應的 類型描述字串 char *type = @encode(Date); NSValue *value = [NSValue value:&date withObjCType:type]; // 定義一個結構體變數 Date date1; // 取出封裝好的結構體 [value getValue:&date1]; // [value objCType]; 取出類型描述字串 NSLog(@"year=%i, month=%i, day=%i", date1.year, date1.month, date1.day);}
Objective-C:Foundation架構-常用類-NSValue