[TOC]
最近在公司内部写了一些 Swift 相关组件的一些思考
Swift 组件开发规范
1. 工程规范
1.1 组件工程创建
利用 pod 自带命令 pod lib create 构建工程(使用详情请见 <a href="#podLib">附录</a>)
Swift 语言组件开发有别于 OC 版本的开发, 引入了 Module 概念,尤其对访问权限关键字的使用:
open > public > internal > filePrivate > private
使用自带命令创建工程,在代码测试时,避免一些访问权限不正当使用,提前暴露使用问题。 比如:function 函数使用 internal 权限,但是生成 framewoek 后却无法访问等
1.2 库的导入
默认情况下,用到哪个库就要导入哪个库,无疑增加了很多重复的工作量,过去 OC 组件工程以 pch 文件 实现全局导入,Swift 引入了 Module 概念,无法在使用 pch。
解决方案
- 构建 工程名-Bridging-Header.h 文件
- 引入 framewok,比如 Swift版网络框架Bowling,通过 #import<Bowling/Bowling-Swift.h>
其中 Bowling 为包名,Bowling-Swift.h 为 framwwork 自动生成的,位于 Bowling.framework/Header 文件下
1.3 单元测试
1.3.1 必要性
测试即使用文档
对于组件使用人员来看,可以通过阅读单元测试来了解功能的使用,方便查看
提高生产效率
提前发现 bug,快速为 dev 提供反馈的机制; 尤其 一处小小的改动,快速验证
改善代码结构设计
单元测试可以充当一个设计工具,它有助于开发人员去思考代码结构的设计,让代码更加有利于测试
1.3.2 使用
系统自带的 XCTestCase 框架 【Unit Testing】
第三方框架 Quick
1.4 思维演化
1.设计先行:分析 -> 调研 -> 设计 -> 架构 -> 拆分实现
2.编程范式跨越:面向对象编程 -> 面向协议(接口)编程
2. 编码规范
2.1 类名命名规范
由于 Swift 引入了 Modul 概念,在类名前不必添加 前缀,仅限于 Swift 之间调用,如果有类名,方法名等冲突可以采用 Modul. 形式访问。OC 调用 Swift 时, Swift 可以通过 @objc() 修改暴露给 OC 的符号名
2.2 对外访问权限
正确使用 open > public > internal > filePrivate > private
2.3 注释
注释标识:option + cmd + /
注释查看:option + 左键
2.4 尽量使用 Swift 原生对象
3. 文档规范
3.1 文档目录结构
- 简介
【 1.1 描述,1.2 特性 】 - 快速引入
【 2.1 系统要求 2.2 安装(至少包括 CocoaPods 安装)】 - 使用方式
【3.1 基本使用 3.2 高级特性 ....】
致谢(可选,比如 参考哪些框架 或者 移植了哪些代码等)
3.2 书写规范
- 标题:数字标号 +.(点) + (空格) + 标题内容,如:2. 快速引入
附录
1. <span id="podLib">pod lib 命令详细使用</span>
比如 :我们以创建 TestPro 组件为例, 打开终端,cd 到指定目录,执行命令 pod lib create TestPro
等待 TestPro template 配置
//自动执行
Cloning `https://github.com/CocoaPods/pod-template.git` into `TestPro`.
Configuring TestPro template.
What platform do you want to use?? [ iOS / macOS ]
iOS
What language do you want to use?? [ Swift / ObjC ]
Swift
Would you like to include a demo application with your library? [ Yes / No ]
Yes
如果开发功能模板选择 Quick
Which testing frameworks will you use? [ Quick / None ]
Quick
如果开发 UI组件 选择 Yes
Would you like to do view based testing? [ Yes / No ]
Yes
最终生成工程目录如下: