如何在class-c?
中传递类的属性作为方法的参数举个例子假设我有:
然后需要:
答案 0 :(得分:4)
属性将具有setter和getter方法。在你的情况下,我假设有setPropA,setPropB,setPropC用于setter,PropA,PropB,PropC用于getter。
然后我将字符串“PropA”传递给util,表示我想访问名为PropA的属性。 util可以通过
获取值id val = [aObj performSelector:NSSelectorFromString(@"PropA")];
并按
设置属性[aObj performSelector:NSSelectorFromString(@"SetPropA") withObject:newValue];
或者,您可以通过NSStringFromSelector()
将setter和getter作为参数传递,将选择器转换为NSString。例如,我通过NSDictionary传递setter和getter。
NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:
NSStringFromSelector(@selector(setPropA:)), kSetterKey,
NSStringFromSelector(@selector(PropA)), kGetterKey, nil];
// inside myUtil
NSString *setter = [userInfo objectForKey:kSetterKey];
[aObj performSelector:NSSelectorFromString(setter) withObject:newValue];
NSString *getter = [userInfo objectForKey:kGetterKey];
id val = [aObj performSelector:NSSelectorFromString(getter)];
希望这会有所帮助。
答案 1 :(得分:2)
是的,您可以将属性名称作为String传递。
然后您可以通过键值编码访问指定的属性: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html
示例:
- (void) myUtilMethod: (MyData *) myData
forPropertyNamed: (NSString *) propName /* which property to operate on (1) */
{
id oldValue = [ myData valueForKey: propName]; // get value (2a)
id newValue = ...; // your calculation here
[myData setValue: newValue forKey: propName]; // set value (2b)
}
答案 2 :(得分:0)
我不会直接绑定这两个类。您应该设置一个模式设计,允许您通过创建一个将在这两者之间建立接口的类来将它们松散地耦合在一起。