Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动将属性值从一个对象复制到另一个不同类型但协议相同的对象(Objective-C)_Objective C_Ios_Properties_Copy - Fatal编程技术网

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

自动将属性值从一个对象复制到另一个不同类型但协议相同的对象(Objective-C),objective-c,ios,properties,copy,Objective C,Ios,Properties,Copy,我有两个具有相同属性集的类,在协议中使用@property指令声明,它们都实现了。现在我想知道是否可以用第二个类的实例的值自动填充第一个类的实例(反之亦然)。 我希望这种方法是健壮的,这样,如果我更改协议中声明的属性的类型,就不需要在复制方法中添加额外的代码。是的,考虑到确切的上下文,可以有多种方法来解决这个问题 目前我能想到的一个方法是首先获取源对象的所有属性,然后使用setValue:value-forKey:key设置目标对象上的值 用于检索所有自定义属性的代码: -(NSSet *)pr

我有两个具有相同属性集的类,在协议中使用@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;
}
-(NSSet*)属性名称{
NSMutableSet*propNames=[NSMutableSet];
无符号整数超过,i;
objc_property_t*properties=class_copyPropertyList([self class],&outCount);
对于(i=0;i

您可能需要签出以获取更多信息。

我是否正确推断必须导入?