2010-06-07 4 views
0

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

Например:

objectA.m:

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

objectBob.m:

#define name @"Bob" 

objectJoe.m

#define name @"Joe" 

(я не уверен, если легально определять строки, но это получает e point through)

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


Если все остальное терпит неудачу, я просто сделать objectA.m:

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

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

ответ

2

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

Затем сделайте:

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

Edit: фиксированная, не ObjC как метод именования. Изменить снова: фиксированный метод.

+0

+1 кроме того, что он будет называться «имя» по стандарту именования какао. –

+0

Методы get-метода Objective-C не используют слово 'get'. Это будет просто «само имя». Методы, начинающиеся с 'get', указывают, что заполняется какой-то заполненный буфер или извлекается удаленный ресурс. – Chuck

+0

Похоже, что все будет хорошо. Может ли/я должен соединить это с протоколом, который определяет функции, которые необходимы базовому классу (например, имя)? На самом деле, нужно ли «имя» быть методом или есть способ сделать его константой для подкласса? – RyanJM

0

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

+0

Есть ли способ уйти от переменных экземпляра и сделать его доступным для методов класса?Или это единственный способ сделать это вызов метода, например chpwn? – RyanJM

+0

Методы и переменные экземпляра - единственный способ настроить поведение по классам. Почему вы не можете использовать вызов метода? – Chuck

Смежные вопросы