前言
眾所周知,Objective-C里的數(shù)組要求存儲(chǔ)的值為對(duì)象闺属,而結(jié)構(gòu)體作為數(shù)組元素的時(shí)候就涉及到了自定義結(jié)構(gòu)體包裝成對(duì)象的問(wèn)題贪庙。通常使用NSValue來(lái)包裝一個(gè)結(jié)構(gòu)體。
具體實(shí)現(xiàn)步驟如下:
- 第一種情況
-
系統(tǒng)封裝好的結(jié)構(gòu)體包裝成NSValue類型
// 例1: // 創(chuàng)建一個(gè)NSRange對(duì)象 NSRange range = NSMakeRange(0,5); // 裝包 NSValue *rangeValue = [NSValue valueWithRange:rang]; // 至此就完成了將一個(gè)系統(tǒng)提供的結(jié)構(gòu)體封裝成對(duì)象的過(guò)程 // 解包 NSRange range1; // 將rangeValue里保存的結(jié)構(gòu)體取出來(lái)扔字,賦值給range1. rang1 = [rangValue rangeValue]; // 例2: // 創(chuàng)建一個(gè)NSPoint對(duì)象 NSPoint point = {3,5}; // 裝包 NSValue *pointValue = [NSValue valueWithPoint:point]; // 解包 NSPoint point1; point1 = [pointValue pointValue];
系統(tǒng)包裝好的結(jié)構(gòu)體,Xcode會(huì)有代碼提示
-
- 第二種情況
-
自定義結(jié)構(gòu)體包裝成NSValue類型
// 首先自定義一個(gè)結(jié)構(gòu)體 typedef struct { char name[20]; char gender[20]; int age; int score; int num; }Student; // 給結(jié)構(gòu)體賦初值 Student stu1 = {"Phelan", "male", 99, 97, 7}; // 裝包 NSValue *stu1Value = [NSValue valueWithBytes:&stu1 objCType:@encode(Student)];// 蘋果官方更推薦使用這個(gè)方法 /* 實(shí)現(xiàn)效果一樣 NSValue *stu1Value = [NSValue value:&stu1 withObjCType:@encode(Student); */ // 解包 // 將stu1裝包后的值取出來(lái)賦值給stu2 Student stu2; [stu1Value getValue:&stu1]; NSLog(@"name = %s, gender = %s, age = %d, score = %d, num = %d", stu1.name, stu1.gender, stu1.age, stu1.score, stu1.num);
-
- 附錄
-
Apple官方文檔
-
總結(jié)
至此就完成了結(jié)構(gòu)體到對(duì)象類型的封裝,初學(xué)者要充分利用Apple提供的官方文檔温技。在開(kāi)發(fā)中一定能夠事半功倍革为。