为 Objective-C 的 Protocol 增加扩展,达到 Objective-C 的 POP 编程效果。
/// 声明协议
@protocol NNCodeProtocol <NSObject>
@optional
+ (void)sayHelloPop;
- (void)sayHelloPop;
@end
@protocol NNCodeWhoProtocol <NNCodeProtocol>
@optional
@property (nonatomic, strong) NSString* who;
@end
/// 对 NNCodeWhoProtocol 协议实现扩展
@nn_extension(NNCodeWhoProtocol, @nn_where(self == [NNCodeObjc class]), NNCodeNameProtocol)
+ (void)sayHelloPop {
DLog(@"+[%@ %s] objc says hello pop", self, sel_getName(_cmd));
}
- (void)sayHelloPop {
DLog(@"-[%@ %s] objc says hello pop", [self class], sel_getName(_cmd));
}
- (NSString *)who {
NSString *who = [NSString stringWithFormat:@"-[%@ %s] objc says I am %@", [self class], sel_getName(_cmd), self.name];
return who;
}
- (void)setWho:(NSString *)who {
@nn_exscope(self) {
@nn_inscope(NNCodeObjc *, self)
self.name = who;
}
}
@end
///声明 NNCodeObjc 类,并遵守 NNCodeWhoProtocol 协议,获取 NNCodeWhoProtocol 协议扩展实现方法
@protocol NNCodeNameProtocol <NSObject>
@optional
@property (nonatomic, strong) NSString* name;
@end
@interface NNCodeObjc : NSObject <NNCodeWhoProtocol, NNCodeNameProtocol>
@property (nonatomic, strong) NSString *name;
@end
@implementation NNCodeObjc
@end
///调用
[NNCodeObjc sayHelloPop];
NNCodeObjc *objc = [NNCodeObjc new];
[objc sayHelloPop];
objc.who = @"objc";
DLog(@"%@", objc.who);
项目地址:
类似项目:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.