我有一个函数,它接收一个对象,一个属性的名称及其值。 我可以用这样简单的东西设置对象的属性:
-(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;
}
}
答案 0 :(得分:3)
好吧,您可以使用KVC:
[_myObject setValue:runtimeValue forKey:runtimeProperty];
当然,您可以首先检查该属性是否对respondsToSelector
有效,或者通过覆盖子类中的valueForUndefinedKey:
和setValue:forUndefinedKey:
来捕获任何无效消息。