在Objective-C中的变量声明中使用TypeName <protocol_name>

时间:2015-05-11 10:43:48

标签: objective-c protocols

通常,当将变量声明为协议时,它按如下方式完成:

id<protocol_name> variable;

但最近我看到了一些我不太了解的东西。编译器允许您定义如下内容:

NSString<protocol_name> *variable;

实际上,从其他“普通”NSString变量中分配将导致编译器发出警告,并且您需要将其强制转换。

我在JSONModel中看过它,框架使用它来“注释”属性。

但是,除此之外是什么意思?有什么好处?

感谢。

1 个答案:

答案 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作为子类。

对于您可以子类化的其他类,您可以在子级中实现该协议。