好的,我知道這個主題在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;
當運行的代碼,我看到日誌適用於兒童安裝人員和Getter的消息。那麼,我應該怎樣做才能消除這個警告,爲什麼我首先得到它?
無論是fred.value和[弗雷德值]呼叫通過吸氣在子類中定義。我的理解是,fred.value語法確實是一個隱式[fred值]的語法糖,因此我希望在兩行或兩行中都有警告。不過,我確實同意你的解決方案可行! (或者當然,首先繼承的全部原因是我有多個子類,它們有一些我正在推入基類的通用代碼) –