iOS组件化(二)

182 阅读3分钟

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-action
  • protocol匹配

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 的”注册”、”实现”、”使用”必须用相同的字符规则,一旦任何一方做出修改都会导致其他方的代码失效,并且重构难度大