У меня есть три класса, которые реализуют один и тот же протокол, и имеют один и тот же родительский класс, который не реализует протокол. Обычно у меня был бы протокол как чисто виртуальные функции в родительском классе, но я не мог найти 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];
в родительский класс, но это не идеально, так как это вызовет ошибки времени выполнения, а не время компиляции.