通常,当将变量声明为协议时,它按如下方式完成:
id<protocol_name> variable;
但最近我看到了一些我不太了解的东西。编译器允许您定义如下内容:
NSString<protocol_name> *variable;
实际上,从其他“普通”NSString变量中分配将导致编译器发出警告,并且您需要将其强制转换。
我在JSONModel中看过它,框架使用它来“注释”属性。
但是,除此之外是什么意思?有什么好处?
感谢。
答案 0 :(得分:1)
有variable
的好处,您可以像NSString*
和id<protocol_name>
一样工作。
您可能需要所有接口,并且不需要进行类型转换。
&#34;滑动&#34; NSString不符合协议&#34; protocol_name&#34;并且编译器不允许这样做。
但您可以使用类别制作NSString符合协议:
@interface NSString(protocol_name) < protocol_name >
@end
实际上NSString<protocol_name>
是不好的例子,因为你不能将NSString
作为子类。
对于您可以子类化的其他类,您可以在子级中实现该协议。