Протокол Objective-C против наследования против расширения? - PullRequest
0 голосов
/ 08 июня 2010

У меня есть пара классов, которые имеют почти идентичный код. Только строка или два отличается между ними. Я хотел бы сделать их "x" из другого класса, который определяет эти функции, а затем использует константы или что-то еще для определения этих строк, которые отличаются. Я не уверен, является ли "x" наследованием или расширением или как. Вот с чем мне нужна помощь.

Например:

objectA.m:

-(void)helloWorld {
    NSLog("Hello %@",child.name);
}

objectBob.m:

#define name @"Bob"

objectJoe.m

#define name @"Joe"

(я не уверен, допустимо ли определять строки, но это помогает понять смысл)

Было бы идеально, если бы objectBob.m и objectJoe.m даже не должны были определять методы, только их отношение к objectA.m. Есть ли способ сделать что-то подобное? Это своего рода протокол, за исключением обратного, я хочу, чтобы «протокол» фактически определял функции.


Если ничего не поможет, я просто сделаю objectA.m:

-(void)helloWorld:(NSString *name) {
    NSLog("Hello %@",name);
}

И пусть другие файлы вызывают эту функцию (и просто #import objectA.m).

Ответы [ 2 ]

2 голосов
/ 08 июня 2010

Просто создайте метод -name в ваших подклассах (вам нужен один базовый класс, а затем подкласс для каждого типа).

Затем выполните:

- (void)helloWorld {
    NSLog(@"hello %@", [self name]);
}

Редактировать: исправлено именование методов, не относящихся к объекту. Снова отредактируйте: фиксированный метод.

0 голосов
/ 08 июня 2010

Звучит как наследство для меня. Определите метод helloWorld как NSLog(@"Hello %@", name) и пусть подклассы будут давать различные значения своим name переменным экземпляра. (Обратите внимание, что я говорю о переменных экземпляра, а не макросах препроцессора, которые для этой цели бесполезны.)

...