首页 > 解决方案 > 从协议中删除函数时,有什么方法可以得到编译器错误/警告?

问题描述

@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和删除该功能foooverride如果我不删除 foo 的实现(类似于C++ 中的等效关键字),是否有任何机制会给我一个编译器错误/警告?

标签: objective-coverridingobjective-c-protocol

解决方案


如果您只是从协议中删除该方法,则没有任何迹象表明您应该从任何符合要求的类中删除相应的方法。这是因为没有办法知道给定的类恰好有一个同名的方法。

您可以做的是重命名您要删除的协议方法。给它起一个名字,保证在你的代码中不存在。

现在尝试构建。在任何试图符合协议的类中,您都会收到一些关于不符合的错误,因为它没有新重命名的协议方法。

从每个类中删除方法后,您可以从协议中删除重命名的方法。


推荐阅读