4
我有兩個具有相同屬性集的類,在協議中使用@property指令聲明,它們都實現。現在我想知道是否可以使用第二個類的實例的值自動填充第一個類的實例(反之亦然)。 我想這種方法是健壯的,所以如果我改變協議中聲明的屬性,將不需要在複製方法中添加額外的代碼。自動將屬性值從一個對象複製到另一個不同類型但另一個相同的協議(Objective-C)
我有兩個具有相同屬性集的類,在協議中使用@property指令聲明,它們都實現。現在我想知道是否可以使用第二個類的實例的值自動填充第一個類的實例(反之亦然)。 我想這種方法是健壯的,所以如果我改變協議中聲明的屬性,將不需要在複製方法中添加額外的代碼。自動將屬性值從一個對象複製到另一個不同類型但另一個相同的協議(Objective-C)
是的,考慮到確切的上下文,可以有多種方法來解決這個問題。
我現在可以想到的一點是首先獲取源對象的所有屬性,然後使用setValue:value forKey:key
來設置目標對象上的值。
代碼檢索所有自定義屬性:
-(NSSet *)propertyNames {
NSMutableSet *propNames = [NSMutableSet set];
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([self class], &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
NSString *propertyName = [[[NSString alloc]
initWithCString:property_getName(property)] autorelease];
[propNames addObject:propertyName];
}
free(properties);
return propNames;
}
您可能希望簽出Key-Value Coding Programming Guide以獲取更多信息。
我是否正確推斷必須有'#import'? –
Rob