组件化-Protocol

 

HomeVC.m
#import "HomeVC.h"
#import "ProtocolManager.h"
#import "AllProtocol.h"
@interface HomeVC ()<Home_Protocol>
@end
@implementation HomeVC

- (IBAction)btnAction:(id)sender {
    Class cls = [[ProtocolManager sharedInstance] classForProtocol:@protocol(Mine_Protocol)];
    UIViewController<Mine_Protocol> *mineVC = [[cls alloc] init];
    [mineVC mine_Action:@{}];
    [self presentViewController:mineVC animated:YES completion:nil];
}
// 在各个模块中实现其协议
+(void)load{
    [[ProtocolManager sharedInstance] registerProtocol:@protocol(Home_Protocol) forClass:[self class]];
}
-(void)homea_Action:(NSString*)string{
}
@end

ProtocolManager.m
在ProtocolManager内维护着一张映射表,以protocol为key,以Class为Value
#import "ProtocolManager.h"
@interface ProtocolManager()
@property (nonatomic,strong) NSMutableDictionary *protocolCache;
@end
@implementation ProtocolManager
+ (instancetype)sharedInstance
{
    static ProtocolManager *mediator;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mediator = [[ProtocolManager alloc] init];
    });
    return mediator;
}
-(NSMutableDictionary *)protocolCache{
    if (!_protocolCache) {
        _protocolCache = [NSMutableDictionary new];
    }
    return _protocolCache;
}
- (void)registerProtocol:(Protocol *)proto forClass:(Class)cls {
    [self.protocolCache setObject:cls forKey:NSStringFromProtocol(proto)];
}
- (Class)classForProtocol:(Protocol *)proto {
    return self.protocolCache[NSStringFromProtocol(proto)];
}
@end
上面一一对应的关系中,类是实现了对应的协议的。通过协议拿到的类是可以使用protocol中声明的方法。

AllProtocol.h
蘑菇街的protocal-class
将各个模块提供的协议统一放在一个文件中(AllProtocol.h),在各个模块中依赖这个文件,实现其协议
#import <Foundation/Foundation.h>
@protocol Home_Protocol <NSObject>
-(void)homea_Action:(NSString*)string;
@end
@protocol Mine_Protocol <NSObject>
-(void)mine_Action:(NSDictionary*)info;
@end

MineVC.m
#import "MineVC.h"
#import "AllProtocol.h"
#import "ProtocolManager.h"
@interface MineVC ()<Mine_Protocol>
@end
@implementation MineVC
+(void)load{
    [[ProtocolManager sharedInstance] registerProtocol:@protocol(Mine_Protocol) forClass:[self class]];
}
- (void)mine_Action:(NSDictionary *)info {
}
@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值