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

vel*_*ist 4 copy properties objective-c ios

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

For*_* Ye 9

是的,鉴于确切的背景,可能有各种方法来解决这个问题.

我现在能想到的是首先获取源对象的所有属性,然后使用它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;
}
Run Code Online (Sandbox Code Playgroud)

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