Objective-C의 추상 클래스와 비슷한 것을 구현하는 방법을 찾는 데 어려움이 있습니다.부모로부터 자식 오버라이드 된 메소드 호출하기
하위 클래스를 지정하지 않고 기본 클래스를 사용하도록 제한하는 것에 대해 실제로 신경 쓰지 않습니다. 원하는 모든 것 : - (void)makeRequest
과 같은 메서드가있는 클래스 A (부모/기본/추상)를 갖고 싶습니다. 클래스 B, C, D 등에서 클래스를 서브 클래스 화하고 클래스 'A 메소드에서 호출되고있는 - (id)getCachedResult
과 같은 메소드가 있습니다. 그래서 기본적으로 클래스 A에서 기본 논리를 구현하기를 원하며이 기본 논리의 일부 세부 사항과 부분을 수정하기위한 하위 클래스가 필요합니다.
퀴즈처럼 들리지만 Objective-C에서 그런 패턴을 구현하는 방법에 손가락을 대지 못했습니다.
UPDATE :
@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
의 호출을 시도, 그리고 그 :
내가 할 노력하고있어입니다 꽤 분명하다. 내가 원하는 것은 동일한 목적을 위해 클래스를 올바르게 디자인하는 방법입니다.
그것은 다소 사소한 것입니다. 서브 클래 싱의 기본 개념입니다. 당신의 문제는 어디에 정확하게 있습니까? 코드의 구체적인 예를 제시하고 문제를 설명해야합니다. 당신이 everythnig 권리를 할 때 - 그리고 실수를하는 많은 기회가 없다 - 그때 그것은 단지 당신이 그것을 묘사하는 방식으로 작동합니다. –
@HermannKlecker, Ok, 어디서 문제가 발생했는지 구체적으로 질문을 업데이트하겠습니다. – DemoniacDeath
B의 인터페이스에서'resultKey'를 선언해야합니다. – Matthias