0

我有一个函数,它接收一个对象、一个属性的名称及其值。我可以像这样简单地设置对象的属性吗:

-(void)dynamicSetterWithProperty:(NSString*)propertyThatIsKnownOnlyInRuntime
                        andValue:(NSString*)valueThatIsKnownOnlyInRuntime{

       _myObject.propertyNameThatIsKnownOnlyInRuntime = valueNameThatIsKnownOnlyInRuntime;

}

还是我必须以这种丑陋的方式来做:

-(void)dynamicSetterWithProperty:(NSString*)propertyThatIsKnownOnlyInRuntime
                        andValue:(NSString*)valueThatIsKnownOnlyInRuntime{

       if([propertyNameThatIsKnownOnlyInRuntime isEqualToString@"name"]){
              _myObject.name = valueNameThatIsKnownOnlyInRuntime;
       }

       else if([propertyNameThatIsKnownOnlyInRuntime isEqualToString@"age"]){
              _myObject.age = valueNameThatIsKnownOnlyInRuntime;
       }

}
4

1 回答 1

3

好吧,您可以使用KVC

[_myObject setValue:runtimeValue forKey:runtimeProperty];

当然,您可以先检查属性是否有效,respondsToSelector或者通过覆盖valueForUndefinedKey:setValue:forUndefinedKey:在您的子类中捕获任何无效消息。

于 2013-06-29T21:45:53.880 回答