自动将属性值从一个对象复制到另一个不同types的对象,但协议相同(Objective-C)

我有两个具有同一组属性的类,在协议中使用@property指令声明,它们都执行。 现在我想知道是否可以使用第二个类的实例中的值自动填充第一个类的实例(反之亦然)。 我想这种方法是健壮的,所以如果我改变协议中声明的属性,将不需要在复制方法中添加额外的代码。

是的,考虑到具体情况,可以采取多种方法解决这个问题。

我现在可以想到的是首先获取源对象的所有属性,然后使用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; } 

您可能需要签出“ 键值编码编程指南”以获取更多信息。