OKこのテーマはSOで何度も言及されていることは知っていますが、そのような質問をいくつか確認した後、サブクラスの基本クラスのゲッター/セッターをオーバーライドすることに関して私が抱えている問題については誰も話していません。
私の基本クラスは次のとおりです。
#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)は警告を生成します
プロパティのタイプ'value'がアクセサのタイプ'value'と一致しません
この行のみ:
barney = fred.value;
コードを実行すると、チャイルドセッターとゲッターの両方のログメッセージが表示されます。では、この警告を排除するにはどうすればよいのでしょうか。そもそもなぜ警告が表示されるのでしょうか。