- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1. 组件化操作
1.1 创建模块
在Terminal中打开指定文件夹后输入 pod lib create 文件名生成一个模块, 创建好后会自动打开一个工程。
接下来打开这个模块,在这个模块的classes里面开始编写代码。
写好代码后,在进行一次pod install 操作,这样就可以看到之前创建的模块了。
1.2 第三方库和其他模块
如果文件依赖一些第三方库,那么就需要为其配置。
然后重新pod install。
基础库也是一样的,但是需要在Podfile里面为其指定路径。
1.3 获取模块资源文件
如果需要用到其他模块的资源文件,那么就会找不到。那么要怎么做呢?
首先把要用到的图片放在对应模块的Assets里面。
然后在podspec里面添加resource_bundles后重新 pod install。
然后就可以获取到相应的bundle获取图片。
获取json文件也是一样的。这里可以看到如果是正常的mainBundle获取就会有问题。
根据相应的bundle来获取json文件的话就没事了。
模块通讯
模块通讯三种方式:
url路由target-actionprotocol匹配
url 路由
目前iOS上大部分路由工具都是基于URL匹配的,或者是根据命名约定,用runtime方法进行动态调用
这些动态化的方案的优点是实现简单,缺点是需要维护字符串表,或者依赖于命名约定,无法在编译时暴露出所有问题,需要在运行时才能发现错误。
URL路由方式主要是以蘑菇街为代表的的 MGJRouter。
其实现思路是:
-
App启动时实例化各组件模块,然后这些组件向ModuleManager注册Url,有些时候不需要实例化,使用class注册
-
当组件A需要调用组件B时,向ModuleManager传递URL,参数跟随URL以GET方式传递,类似openURL。然后由ModuleManager负责调度组件B,最后完成任务。
// 1、注册某个URL
MGJRouter.registerURLPattern("app://home") { (info) in
print("info: \(info)")
}
//2、调用路由
MGJRouter.openURL("app://home")
URL 路由的优点
- 极高的动态性,适合经常开展运营活动的app,例如电商
- 方便地统一管理多平台的路由规则
- 易于适配URL Scheme
URl 路由的缺点
- 传参方式有限,并且无法利用编译器进行参数类型检查,因此所有的参数都是通过字符串转换而来
- 只适用于界面模块,不适用于通用模块
- 参数的格式不明确,是个灵活的 dictionary,也需要有个地方可以查参数格式。
- 不支持storyboard
- 依赖于字符串硬编码,难以管理,蘑菇街做了个后台专门管理。
- 无法保证所使用的的模块一定存在
- 解耦能力有限,url 的”注册”、”实现”、”使用”必须用相同的字符规则,一旦任何一方做出修改都会导致其他方的代码失效,并且重构难度大