Есть ли способ получить сообщение об ошибке / предупреждении компилятора при удалении функции из протокола?

@protocol MyProtocol

- (void)foo;
- (void)bar;

@end

@interface MyClass : NSObject < MyProtocol >

@end

@implementation MyClass

// My Protocol implementation 

- (void)foo {
    NSLog(@"foo implementation.");
}

- (void)bar {
    NSLog(@"foo implementation.");
}
@end

Теперь предположим, что я решил изменить MyProtocol и удалите функцию foo, Есть ли механизм, который выдаст мне ошибку / предупреждение компилятора, если я не удаляю реализацию foo (что-то вроде override Ключевой эквивалент в C++)?

1 ответ

Решение

Если вы просто удалите метод из протокола, нет никакого способа получить какое-либо указание на то, что вы должны удалить соответствующий метод из любого соответствующего класса. Это потому, что нет способа узнать, что у данного класса просто есть метод с тем же именем.

Что вы можете сделать, это переименовать метод протокола, который вы хотите удалить. Дайте ему имя, которое гарантированно не существует в вашем коде.

Теперь попробуйте построить. Вы получите некоторые ошибки о несоответствии в любом классе, пытающемся соответствовать протоколу, потому что у него не будет недавно переименованного метода протокола.

После удаления метода из каждого из этих классов вы можете удалить переименованный метод из протокола.

Другие вопросы по тегам