覆盖objective-c中的setter

时间:2012-12-31 14:25:57

标签: objective-c ios

我希望NSDate设置NSInteger,我@property

@property (strong,nonatomic) NSDate *date;

我想要二传:

-(void)setDate:(NSInteger *)tStamp {
    thumbImgUrl = [NSDate dateWithTimeIntervalSince1970:tStamp];
}

所以我想从NSInteger值而不是NSDate值设置我的日期。我如何声明这个二传手?当我尝试将它放在头文件中时,它可以正常工作,但我收到了警告:

Type of property 'date' does not match type of accessor 'setDate:

如果我想在 .m 文件中声明它,我会收到错误:

duplicate declaration of method setDate:

为什么呢?有一种方法可以使用不同的输入类型声明setter吗?

2 个答案:

答案 0 :(得分:5)

通常,这是在Objective-C中执行操作的一种非常糟糕的方式,我强烈建议您将方法名称更改为其他内容,例如-(void)setDateWithInteger:(NSInteger)tStamp。 (说到这个,NSInteger是一个原始的,而不是一个对象)并且回答你的问题,不,如果你使用@property,就没有办法用不同的输入类型声明一个setter。如果您坚持按照自己的方式进行操作,则必须在不使用@property的情况下声明方法。

答案 1 :(得分:0)

您可以接受id类型作为setter函数的输入参数。

您收到duplicate declaration of method setDate:,因为您的实施文件中很可能有@synthesize date行。这会自动为您生成getter / setter。删除该行,因为您提供自己的实现。