好的,我知道这个主题之前在 SO 上已经提到过很多次,但是在检查了几个这样的问题之后,没有人谈到我在覆盖子类中的基类 getter/setter 时遇到的问题。
我的基类是:
#import <Foundation/Foundation.h>
@interface BaseClass : NSObject
@property (nonatomic, assign) int value;
@end
@implementation BaseClass
@synthesize value;
@end
从那我希望子类充当垫片并将“值”从 int 映射到我的子类中的枚举:
#import <UIKit/UIKit.h>
#import "BaseClass.h"
typedef enum {
zero = 0,
one,
two,
three,
four
} NumberEnum;
@interface ChildClass : BaseClass
-(void)setValue:(NumberEnum)newValue;
-(NumberEnum)value;
@end
@implementation ChildClass
-(void)setValue:(NumberEnum)newValue
{
[super setValue:(int)newValue];
NSLog(@"Child Setter");
}
-(NumberEnum)value
{
NSLog(@"Child Getter");
return (NumberEnum)[super value];
}
@end
我使用以下代码测试此代码:
ChildClass* fred = [[ChildClass alloc] init];
NumberEnum barney;
fred.value = one;
barney = fred.value;
barney = [fred value];
XCode (4.5.2) 生成警告
属性“值”的类型与访问器“值”的类型不匹配
仅在这一行:
barney = fred.value;
运行代码时,我看到了 Child Setter 和 Getter 的日志消息。那么我应该怎么做才能消除这个警告,为什么我首先得到它?