0

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、例外が発生します。これは明らかです。私が欲しいのは、同じ目的のためにクラスを正しく設計する方法です。

4

1 に答える 1

0

要求どおり: resultKeyB のインターフェイスで宣言する必要があります。:-)

于 2013-02-25T13:58:40.377 に答える