用模型取代字典數組的好處
- 使用字典的弊端
- 一般情況下設置字典數據和取出字典數據都得使用字符串類型的"key",編寫這些"key"時,Xcode沒有智能的提示,只能手動的去敲那些字符串
比如
```objc
NSString *name = dict[@"name"];
dict[@"name"] = @"jordan";
```
如果手敲字符串key,key就很容易寫錯,此時編譯器是不會有任何的警告和報錯,則會造成數據存取和讀取出錯
-
模型的優點
- IOS中的模型,其實就是數據模型,專門用于存放數據的對象
- 模型設置數據和讀取都是通過其屬性,屬性名稱如果寫錯,編譯器會做出警告或者報錯,提示修復數據的正確性
- 同樣,使用模型訪問屬性時,Xcode會有數據提示,可以提高編寫代碼的效率
NSString *name = dict.name; dict.name = @"jordan";
字典轉模型過程
- 字典轉模型的過程最好將其封裝在模型內部
- 在@interface中連線數組
@interface property (strong, nanotomic) NSArray * shop;
- 模型應該提供一個可以傳入的字典參數的構造方法
- 新建cocoa touch class 繼承于NSObject,設置商品的名稱和圖片屬性
- .h中傳入兩個構造方法
import <Foundation/Foundation.h>
@interface shop : NSObject
@interface property (strong, nanotomic) NSString * name;
@interface property (strong, nanotomic) NSString * icon;
-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)initWithDict:(NSDictionary *)dict;
@end
```
-
.m中實現構造方法
#import "shop.h" @ implementation shop -(instancetype)initWithDict:(NSDictionary *) dict { if (self = [super init]) { self.name = dict@"name"; self.icon = dict@"icon"; } return self; } +(intancetype)shopWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } @end
控制器中加載字典模型
-
使用懶加載字典模型
pragma mark - 加載字典數組
- (NSArray *) shops{
if (_shop == nil){
//1、加載一個字典數組
NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"]];
//2、將字典數組轉換為字典模型
NSMutableArray *shopArray = [NSMutableArray array];
for (NSDictionary *dict in dictArray){
shop *s = [shop shopWithDict:dict];
[shopArray addObject:shop];
}
//3、賦值
_shop = shopArray;
}
return _shops;
}
```