1.City类里面有一个Coord类的属性,还有一些其他属性,Coord里面有两个property。
当调用initWithDictionary给Coord里面的属性赋值的时候我知道发生了什么,但是当City里面还有一个含有两个属性的属性时候init是怎么赋值的?囧rz 我是一个小白,感觉说的不是很明白。
(void)setValue:(id)value forKey:(NSString *)key
{
if ([value isKindOfClass:[NSNull class]]) {
return;
}
if ([key isEqualToString:@"city"]) {
value = [[City alloc] initWithDictionary:value];
}
[super setValue:value forKey:key];//还有为什么这里在if之外?
}
-
(instancetype)initWithDictionary:(NSDictionary *)dictionary
{
if ([dictionary isKindOfClass:[NSDictionary class]]) {self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dictionary]; } return self;
} else {
return nil;
}
}
-(void)setValue:(id)value forKey:(NSString *)key
这个方法是对系统KVC
方法的重写,如果key
为city
,value
转成City
对象再用系统默认的方法setValue:forKey:
,key
不是city
时直接setValue:forKey:
。