iOS之功能组件化

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

现在有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之功能组件化)