項目的不斷更迭,致使項目愈來愈大,愈來愈臃腫,爲了讓項目更加條理,須要對項目進行模塊化處理,爲了減小模塊之間的耦合,因而就有了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