gpt4 book ai didi

objective-c - 一个类别可以同时实现一个协议(protocol)吗?

转载 作者:太空狗 更新时间:2023-10-30 03:10:30 26 4
gpt4 key购买 nike

如果我为类创建的类别添加了也满足协议(protocol)规定的契约的方法,我想将该类别类标记为实现协议(protocol),从而向 Obj-C 预指示-处理器,该类也有效​​地实现了协议(protocol)。

委托(delegate)示例(为清楚起见,感谢 Ole!):

@protocol SomeDelegate <NSObject>
- (void)someDelegateMessage;
@end

示例类别:

@interface NSObject (SomeCategory) <SomeDelegate>
- (void)someDelegateMessage;
@end

还有一个典型的实现

@implement NSObject (SomeCategory)
- (void)someDelegateMessage {}
@end

当我实际尝试这个时,我会收到每个 NSObject 方法的警告:

warning: incomplete implementation of category 'SomeCategory'

warning: method definition for '-description' not found

...

warning: method definition for '-isEqual:' not found

warning: category 'SomeCategory' does not fully implement the 'NSObject' protocol

如果我删除 <SomeDelegate> 工作正常来自声明,但当然 NSObject 不被识别为 SomeDelegate

最佳答案

解决方法是在没有实现的类别上声明协议(protocol),并在不同的类别中实现该方法,例如:

@interface NSObject (SomeCategory) <SomeDelegate>
- (void)someDelegateMessage;
@end

@implementation NSObject (SomeCategory_Impl)
- (void)someDelegateMessage {}
@end

如果你这样做,NSObject将被视为符合 <SomeDelegate>在编译时,运行时检查 someDelegateMessage将会成功。然而,conformsToProtocol:运行时检查将失败。

当然,你应该file a bug要求在核心类上声明的方法不要生成警告。

关于objective-c - 一个类别可以同时实现一个协议(protocol)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com