【问题标题】:Objective-C generic getter methodsObjective-C 通用 getter 方法
【发布时间】:2012-06-11 18:14:29
【问题描述】:

当我像下面这样声明我的属性时,我需要使用 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: %@", ?????)

}

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

非常感谢! 雷诺

【问题讨论】:

  • 似乎有点奇怪:为什么要对不同的对象使用相同的 getter?如何选择我想要的对象?
  • 为什么要编写自定义 getter 方法?有必要吗?我的意思是使用 @synthesize 的默认 getter/setter。或者如果有什么特别需要的,请清除!

标签: objective-c getter-setter


【解决方案1】:

这是不可能的。

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

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

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

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

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

// ...

【讨论】:

  • 您好,感谢您的回答。我想避免剪切和粘贴,因为我在该对象中定义了很多属性,它们可能会在整个项目中发生变化,但如果无法避免......
猜你喜欢
  • 2016-11-30
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多