在Objective-C中,我可以将方法添加到具有类别的现有类中,例如.
@interface NSString (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end
是否也可以通过协议实现这一点,例如,如果有NSString协议,比如:
@interface <NSString> (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end
我之所以想这样做,是因为我对NSObject(类)有几个扩展,只使用公共NSObject方法,我希望这些扩展也能与实现协议的对象一起工作.
再举一个例子,如果我想编写一个方法logDescription,将对象的描述打印到日志(log)中,该怎么办
- (void) logDescription {
NSLog(@"%@", [self description]);
}
我当然可以将这个方法添加到NSObject,但是还有其他类不是从NSObject继承的,我也希望有这个方法,例如NSProxy.因为它只使用公共协议的成员.
编辑:Java8现在在接口http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf中有了"虚拟扩展方法".这正是我希望在Objective-C中所做的.我没有看到这个问题得到如此多的关注...
当做