我很难找到在Objective-C中实现类似抽象类的方法。
我实际上并不关心在没有子类化的情况下限制使用我的基类,我想要的只是:
我想要类A(父/基/抽象),其方法类似- (void)makeRequest
,我想在类B,C,D等中将其子类化,并且调用类似- (id)getCachedResult
的方法来自'A方法'。所以基本上我希望类A实现一些基本逻辑,我希望它的子类能够修改这个基本逻辑的一些细节和部分。
听起来像是一个琐事,但我不能指责在Objective-C中实现这种模式。
更新:
这是我正在尝试做的事情:
@interface A : NSObject
- (void)makeRequest;
- (NSString *)resultKey;
@property (strong) NSMutableDictionary * result;
@end
@implementation A
- (void)makeRequest
{
self.result[self.resultKey] = @"Result";
}
- (NSString *)resultKey
{
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"%@ should be overrided in subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
return nil;
}
@end
/////////////////////////////
@interface B : A
@end
@implementation B
- (NSString *)resultKey
{
return @"key";
}
@end
当我创建B类实例并试图调用它的方法- (void)makeRequest
时,我得到了异常,这很明显。我想要的是一种正确设计我的类的方法。
答案 0 :(得分:0)
根据要求:您应该在B的界面中声明resultKey
。 : - )