美文网首页
iOS之功能组件化

iOS之功能组件化

作者: 皮特儿 | 来源:发表于2016-07-18 11:26 被阅读315次

    功能的组件化,其实最大的目的就是为了降低功能之前的依赖,降低耦合度。

    现在有2种组件化的方式:

    1.URL Schema:

    推荐JLRoutes,蘑菇街也按照自己的业务需要写了一个MGJRouter,咱们也可以按照自己的业务需要写一款Router。JLRoutes是遍历查找的,MGJRouter与HHRouter是匹配查找,可以说说各有千秋。

    #import"JLRoutes.h"

    - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {

           return [JLRoutesrouteURL:url];

    }

    - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {

              return [JLRoutesrouteURL:url];

    }

    - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url options:(NSDictionary*)options {

              return [JLRoutesrouteURL:url];

    }

    //解析testApp://home

    [JLRoutesaddRoute:@"/home"handler:^BOOL(NSDictionary*_Nonnullparameters) {

              //处理跳转到home界面

              returnYES;

    }];

    //通用导航跳转

    [JLRoutesaddRoute:@"/navPush/:Controller"handler:^BOOL(NSDictionary*_Nonnullparameters) {

    //通过runtime获取到Controller类型,然后通过runtime对property赋值,最后push

    returnYES;

    }];

    2.面向协议编程:

    可以借助强大的Objection来实现。

    1.定义好protocol

    2.将vc绑定到protocol

    3.通过protocol拿到vc的类型,不需要依赖vc

    4.属性与接口都在protocol定义好

    5.在vc中实现协议即可

    @protocolTTTProtocolTest

    @property(nonatomic, assign)NSUInteger    myIndex;

    @end

    @implementationTTTObjectionModule

    - (void)configure {

    [selfbind:[ViewController class] toProtocol:@protocol(TTTProtocolTest)];

    }

    @end

    JSObjectionInjector *injector = [JSObjection defaultInjector];// [1]

    injector = injector ? : [JSObjection createInjector];// [2]

    injector = [injector withModule:[[TTTObjectionModule alloc] init]];// [3]

    [JSObjectionsetDefaultInjector:injector];// [4]

    UIViewController *vc = [[injectorgetObject:@protocol(TTTProtocolTest)] new];// [2]

    vc.myIndex=3;

    UINavigationController*nc = [[UINavigationController alloc] initWithRootViewController:vc];

    self.window.rootViewController= nc; 

    相关文章

      网友评论

          本文标题:iOS之功能组件化

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