在開(kāi)發(fā)中,我們要建很多模型類來(lái)存儲(chǔ)格式化數(shù)據(jù),但是在輸出log的時(shí)候,只能打印出類名和內(nèi)存地址。不會(huì)像系統(tǒng)的NSArray或NSDictionary一樣打印出詳細(xì)的 每個(gè)屬性的值。像下面這段代碼,我們自定義一個(gè)WSModel類,它有name、height兩個(gè)屬性。
@interface WSModel : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) CGFloat height;
@end
我們創(chuàng)建WSModel的一個(gè)對(duì)象,并打印。
WSModel *model = [[WSModel alloc] init];
model.name = @"Tom";
model.height = 180.f;
NSLog(@"model = %@", model);
輸出是這樣的:
model = <WSModel: 0x60000003f2a0>
可以看到name,height的值并沒(méi)有打印出來(lái)。
再打印個(gè)NSDictionary看看:
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Tom", @"name", @(180.f), @"height", nil];
NSLog(@"dic = %@", dic);
打印是這樣的:
dic = {
height = 180;
name = Tom;
}
那怎么讓自定義對(duì)象,既打印出地址 又打印出各屬性值呢?答案是覆寫自定義類的description方法。如下:
@implementation WSModel
- (NSString *)description {
return [NSString stringWithFormat:@"<%@: %p, %@>",
[self class],
self,
@{@"name":_name,
@"height":@(_height)
}
];
}
@end
此時(shí)再看下新建對(duì)象的打印:
model = <WSModel: 0x60000003e9e0, {
height = 180;
name = Tom;
}>
我們?cè)诎杨惷椭羔樀刂钒凑障到y(tǒng)默認(rèn)格式打印,再把所有的屬性包裝到一個(gè)字典里,便于以后擴(kuò)展。如果新增一個(gè)屬性,就在字典中加個(gè)key value即可。
很簡(jiǎn)單,不提供Demo了。如果幫到了你,請(qǐng)點(diǎn)擊喜歡??