项目的不断更迭,导致项目越来越大,越来越臃肿,为了让项目更加条理,需要对项目进行模块化处理,为了减少模块之间的耦合,于是就有了Lotusoot这个工具。
1.Lotusoot工具集成:
1.安装
pod 'Lotusoot'
2.使用
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // 通过 Build 阶段自动生成的 Lotusoot.plist 注册
LotusootCoordinator.registerAll()
return true
}
3.配置
- 在Xcode中点击项目,选择你的target,点击Buid Phases,添加New Run Script Phase;
- 将新建的Run Script拖拽至Compile Sources上方、Check Pods Manifest.lock下方,并填入一下脚本(执行python):
python ${PODS_ROOT}/Lotusoot/Lotusoot/Lotusoot.py ${SRC_ROOT} ${SRCROOT} Lotusoot # 参数1: 扫描路径 # 参数2: ${SRCROOT},Lotusoot.plist 输出地址 # 参数3: Lotusoot 命名后缀(可省略),省略将会导致脚本执行时间变长
- 编译你的工程,在 Finder 中可以看到,工程目录下生成了
Lotusoot.plist
,将其拖入工程中,不要选择 Copy items if needed
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协议,并需要加入注释命名空间-@NameSpace
、Lotusoot-@Lotusoot
、Lotus-@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调原生/应用之间的跳转