我有这样的事情:使用__attribute __((objc_requires_super))与协议
@protocol MyProtocol <NSObject>
- (void)oneMethod;
@end
。
@interface BaseClassWithProtocol : NSObject <MyProtocol>
@end
。
@interface ChildClassWithProtocol : BaseClassWithProtocol
@end
BaseClassWithProtocol
已实施oneMethod
,我想显示警告,如果ChildClassWithProtocol
不在其oneMethod
实现中调用超。
但我不知道我应该在哪里写__attribute__((objc_requires_super))
。
将它写入协议不支持,而在.h中重新定义oneMethod看起来很愚蠢。
那么有没有什么标准的方法可以处理这个问题?
谢谢。 在.h中重新声明oneMethod不会覆盖接口,它恰好与协议中声明的声明相同。我不知道我的理解是否正确。但是,如果在.h和协议中声明的这两个方法具有相同的名称但参数类型不同呢?这就是为什么我认为它很愚蠢,因为我不知道哪一个是最终的声明,而且两次声明似乎很冗长。但是,它似乎是我可以放入铛属性的唯一地方,我将采取这一做法。 – Tepmnthar
但是,你能告诉我swift协议扩展是否可以做到这一点(我对swift知之甚少)。或者你能告诉我如何用一个具有协议和抽象类的类(不是其他语言中的“抽象类”,仅仅意味着比其子的抽象更抽象,也许不实现某些方法),使用宏/铿锵属性/还是其他? – Tepmnthar
@Tepmnthar同名,但参数类型不同?这两种方法将被视为两种不同的方法,因为Objective-C没有*方法重载* – nayem