项目的不断更迭,致使项目愈来愈大,愈来愈臃肿,为了让项目更加条理,须要对项目进行模块化处理,为了减小模块之间的耦合,因而就有了Lotusoot这个工具。python
pod 'Lotusoot'复制代码
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // 经过 Build 阶段自动生成的 Lotusoot.plist 注册
LotusootCoordinator.registerAll()
return true
}复制代码
python ${PODS_ROOT}/Lotusoot/Lotusoot/Lotusoot.py ${SRC_ROOT} ${SRCROOT} Lotusoot
# 参数1: 扫描路径
# 参数2: ${SRCROOT},Lotusoot.plist 输出地址
# 参数3: Lotusoot 命名后缀(可省略),省略将会致使脚本执行时间变长复制代码
Lotusoot.plist
,将其拖入工程中,不要选择 Copy items if needed
Tip: 能够将 Lotusoot.plist
放入 .gitignore
文件避免不要的冲突
let lotus = s(AccountLotus.self)
let accountModule: AccountLotus = LotusootCoordinator.lotusoot(lotus: lotus) as! AccountLotus
accountModule.login(username: "admin", password: "wow") { (error) in
print(error ?? "")
}复制代码
let error: NSError? = LotusootRouter.register(route: "newproj://account/login") { (lotusootURL) in
accountModule.showLoginVC(username: "admin", password: "wow")
}复制代码
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")
}复制代码
1.建立模块的Lotus协议,包含全部能调用的方法列表git
2.建立一个Lotusoot实现Lotus协议,并须要加入注释命名空间-@NameSpace
、Lotusoot-@Lotusoot
、Lotus-@Lotus:(该注释是为了执行脚本时自动注册)
swift
// @NameSpace(TestAccountModule)
// @Lotusoot(AccountLotusoot)
// @Lotus(AccountLotus)复制代码
3.Tip: 因为 Swift 的一些限制,目前
bashLotusoot
必须继承 NSObject
一、Extension.swift: String类的扩展;返回输入类的字符串;app
二、Lotusoot.py: 脚本文件,为了实现自动注册;模块化
三、LotusootCoordinator.swift:用来注册Lotusoot;工具
四、LotusootRouter.swift:用来注册短链以及短链调用;ui
五、LotusootURL.swift: url对象,有route(路由)和params(参数)两个属性;还有两个方法route(url: String)(路由解析)、params(url: String)(参数解析)url
短链注册和短链调用的应用场景: H5调原生/应用之间的跳转spa