У меня есть три класса, которые реализуют один и тот же протокол и имеют один и тот же родительский класс, который не реализует протокол. Обычно у меня был бы протокол как чистые виртуальные функции в родительском классе, но я не мог найти способ Objective-C для этого.Objective-C Указатель на класс, который реализует протокол
Я хочу использовать полиморфизм в этих подклассах, объявляя чистые виртуальные функции в суперклассе, после чего дети реализуют эти функции. Однако единственный способ Objective-C, который я нашел для этого, состоит в том, чтобы каждый ребенок явно принял решение о внедрении протокола, когда я делаю это так, что суперкласс не знает, что дети будут реализовывать этот протокол, поэтому есть предупреждения времени компиляции повсюду.
Некоторые псевдо-код, если это не имело смысла:
@interface superclass: NSObject
{}
@interface child1: superclass<MyProtocol>
{}
@interface child2: superclass<MyProtocol>
{}
Потребитель этих классов:
@class child1
@class child2
@class superclass
@interface SomeViewController: UIViewController
{
child1 *oneView;
child2 *otherView;
superclass *currentView;
}
-(void) someMethod
{
[currentView protocolFunction];
}
Единственный хороший способ я нашел, чтобы сделать чисто виртуальные функции Objective-C - это взлом, помещая [self doesNotRecognizeSelector:_cmd];
в родительский класс, но он не идеален, так как это вызовет ошибки во время выполнения, а не время компиляции.
Похоже пути ObjC чистых виртуальных/абстрактных методы «класс кластеры». Возможно, вам стоит что-то изучить. – nmr