美文网首页
协议模块化

协议模块化

作者: iOS_Ru | 来源:发表于2018-05-25 11:59 被阅读0次

    现在的新项目实现了简单的协议模块化,即模块之前都是单独存在的,通过模块中心获取模块的提供者执行的。

    大概就是每个模块有个 协议和协议提供者(主要就是实现协议里面的方法)

    看看核心的代码

    这是模块中心的 协议提供者
    模块中心协议的代码
    #import <Foundation/Foundation.h>
    
    @protocol ModuleServiceProtocol <NSObject>
    
    
    /**
     获取每个协议的提供者实例
    
     @return nil
     */
    + (id)getModuleInstance;
    
    @end
    
    之后所有的模块声明的协议都遵循这个协议。方便共同的方法管理
    
    

    提供者

    #import <Foundation/Foundation.h>
    
    #import "ModuleServiceProtocol.h"
    #import "ModuleOneProtocol.h"
    #import "ModuleTwoProtocol.h"
    
    @interface ModuleServiceCenter : NSObject
    
    + (instancetype)shareCenter;
    
    //根据协议注册对应提供者的方法
    - (void)registerService:(Protocol *)protocol forProvider:(Class)provider;
    
    //根据协议获取模块的提供者
    - (id)getProviderByService:(Protocol *)protocol;
    
    @end
    
    

    具体的实现可以看gihub的代码https://github.com/rjb0514/ProtocolModuleDemo

    每个模块都有自己的协议 跟提供者
    控制器之间的跳转都是通过 协议及提供者来提供的
    大概控制器之间的跳转代码如下

    //首先从模块中心获取模块的提供者
        id<ModuleTwoProtocol> provider = [[ModuleServiceCenter shareCenter]getProviderByService:@protocol(ModuleTwoProtocol)];
        //获取对应的控制器
        UIViewController *vc = [provider gotoTwoVCWithName:@"哈哈"];
        [self.navigationController pushViewController:vc animated:YES];
    
    
    //传参数的话 就这么穿
    - (id)gotoTwoVCWithName:(NSString *)name {
        TwoViewController *vc = [[TwoViewController alloc] init];
        vc.name = name;
        return vc;
    }
    

    先这么简单的介绍 之后看后续代码的优化 然后在记录下来
    虽然现在的模块化还不够完整, 后续改进

    相关文章

      网友评论

          本文标题:协议模块化

          本文链接:https://www.haomeiwen.com/subject/pkvyjftx.html