Lotusoot(模块化工具)

587 阅读2分钟

      项目的不断更迭,导致项目越来越大,越来越臃肿,为了让项目更加条理,需要对项目进行模块化处理,为了减少模块之间的耦合,于是就有了Lotusoot这个工具。

1.Lotusoot工具集成:

1.安装

pod 'Lotusoot'

2.使用

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    // 通过 Build 阶段自动生成的 Lotusoot.plist 注册
    LotusootCoordinator.registerAll()
    return true
}

3.配置

  1. 在Xcode中点击项目,选择你的target,点击Buid Phases,添加New Run Script Phase;
  2. 将新建的Run Script拖拽至Compile Sources上方、Check Pods Manifest.lock下方,并填入一下脚本(执行python):

  3. python ${PODS_ROOT}/Lotusoot/Lotusoot/Lotusoot.py ${SRC_ROOT} ${SRCROOT} Lotusoot
    # 参数1: 扫描路径
    # 参数2: ${SRCROOT},Lotusoot.plist 输出地址
    # 参数3: Lotusoot 命名后缀(可省略),省略将会导致脚本执行时间变长

  4. 编译你的工程,在 Finder 中可以看到,工程目录下生成了 Lotusoot.plist,将其拖入工程中,不要选择 Copy items if needed
  5. Tip: 可以将 Lotusoot.plist 放入 .gitignore 文件避免不要的冲突

2.Lotusoot的调用

1.服务调用

let lotus = s(AccountLotus.self) 
let accountModule: AccountLotus = LotusootCoordinator.lotusoot(lotus: lotus) as! AccountLotus
accountModule.login(username: "admin", password: "wow") { (error) in
    print(error ?? "")
}

2.短链注册

let error: NSError? = LotusootRouter.register(route: "newproj://account/login") { (lotusootURL) in
    accountModule.showLoginVC(username: "admin", password: "wow")
}

3.短链调用

let param: Dictionary = ["username" : "admin",
                                 "password" : "wow"]

// 无回调                                 
LotusootRouter.open(route: "newproj://account/login", params: param)
// 有回调
LotusootRouter.open(route: "newproj://account/login", params: param).completion { (error) in
    print(error ?? "open success")
}


3.注释规范

1.创建模块的Lotus协议,包含所有能调用的方法列表

2.创建一个Lotusoot实现Lotus协议,并需要加入注释命名空间-@NameSpaceLotusoot-@LotusootLotus-@Lotus:(该注释是为了执行脚本时自动注册)

// @NameSpace(TestAccountModule)
// @Lotusoot(AccountLotusoot)
// @Lotus(AccountLotus)

3.Tip: 由于 Swift 的一些限制,目前 Lotusoot 必须继承 NSObject


4.源码解析


1、Extension.swift: String类的扩展;返回输入类的字符串;

2、Lotusoot.py: 脚本文件,为了实现自动注册;

3、LotusootCoordinator.swift:用来注册Lotusoot;

4、LotusootRouter.swift:用来注册短链以及短链调用;

5、LotusootURL.swift: url对象,有route(路由)和params(参数)两个属性;还有两个方法route(url: String)(路由解析)、params(url: String)(参数解析)


5.注

短链注册和短链调用的应用场景: H5调原生/应用之间的跳转