Objective-C通用getter方法

时间:2012-06-11 10:08:19

标签: objective-c getter-setter

当我声明我的属性时,我需要使用getter属性覆盖多个属性的getter方法,如下所示。我希望所有属性的getter与获取这三个属性的代码的方法相同。

@property (nonatomic,strong, getter=getObject) (NSString*) obj1;
@property (nonatomic,strong, getter=getObject) (NSString*) obj2;
@property (nonatomic,strong, getter=getObject) (NSString*) obj3;

虽然,我需要在我的getObject方法中知道当前正在询问哪个属性。是否可以在getObject方法的实现中知道当前正在询问哪个对象?我希望以下%@代码返回obj1,obj2或obj3。

-(NSString*) getObject{ 

   NSLog(@"the property requested is: %@", ?????)

}

关于如何做到这一点的任何想法?

非常感谢! 雷诺

1 个答案:

答案 0 :(得分:1)

这是不可能的。

当您定义getter方法时,编译器会将myObject.obj3的请求转换为[myObject getObject]。此时,您丢失了有关调用哪个属性的信息。

您应该为每个属性定义一个不同的getter,任何共享或重复的代码都可以进入getObject:这样的私有方法:

- (NSString *)getObject:(NSString *)propertyName {
    // ...
}

- (NSString *)obj1 {
    return [self getObject:@"obj1"];
}

- (NSString *)obj2 {
    return [self getObject:@"obj2"];
}

// ...