swift代码开发规范

目录

  • 工程结构
  • 模块代码结构
  • 代码书写规范

一、工程结构

当前swift项目工程还在整合中,这里以旧项目结构进行展示,原理是一样的。
结构图如下:


工程结构
工程解说

备注:
项目工程要分层,上面结构不是一成不变;可以根据需求进行扩展,但是一定要分层,方便后续代码管理以及功能优化。

二、模块代码结构

参照OC的MVVM设计模式,这里的swift也采用MVVM。当前工程的登陆设备列表界面已经采用这种模式。
结构如下:

MVVM

备注:
为了方便代码管理,上面文件摆放顺序要一致:Controller➡️View➡️ViewModel➡️Model

特别注意:
如果Controller或View或ViewModel或Model中包含内容过多,里面必须建相应的子文件进行说明:

分层

三、代码书写规范

3.1、代码组织

  • 常量----------------------------控制器中不要出现魔鬼数字/硬编码
  • Life Cycle --------------------生命周期方法
  • Event Response------------事件响应方法
  • Public Methods-------------公有方法
  • Private Methods------------私有方法
  • lazy Methods---------------懒加载方法
  • CustomDelegate-----------自定义代理
  • SystemDelegate-----------系统代理

在代码中的体现如下:

//---------常量区域----------------

class SPCHomeViewController: BaseViewController {
    //-----------属性-------------

    //-----------Life Cycle----------
    
    //-----------Event Response----------
    
    //-----------Public Methods --------
    
    //-----------Private Methods --------
    
    //-----------lazy Methods ----------
}

//---------------CustomDelegate----------

//---------------SystemDelegate---------

备注:
为了方便代码管理、上述需要严格划分。

3.2、类、函数等,左大括号不另一起行,并且跟前面留有空格

Good

func myFunc() {
}

class MyClass() {  
}

Bad

func myFunc() 
{
}

3.3、函数、类中间要空一行

Good

func myFunc1() {
}

func myFunc2() {
}

class MyClass1 {
}

Bad

func myFunc1() {
}
func myFunc2() {
}


class MyClass1 {
}

3.4、二元运算符,前后都要有空格

Good

let i = 5 + 6
let r = i % 10

Bad

let i=5+6
let r=i%10

3.5、区间运算符两边也要有空格

Good

let range = 1 ..< 10

Bad

let range = 1..<10

3.6、逗号后面跟空格

Good

let arr = [1, 2, 3, 4]

Bad

let arr = [1,2,3,4]

3.7、类继承、参数名和类型之间等,冒号前面不加空格,但后面跟空格

Good

class MyClass: NSObject {
}

func myFunc(value: Int) {
}

Bad

class MyClass : NSObject {
}

func myFunc(value:Int) {
}

3.8、if后面的else,跟着上一个if的右括号

Good

if flag {
    // code
} else {
    // code
}

Bad

if flag
{
    // code
}
else
{
    // code
}

3.9、switch中,case跟switch左对齐

Good

switch value {
case 1:
    // code
case 2:
    // code
default:
    // code
}

Bad

switch value {
    case 1:
        // code
    case 2:
        // code
    default:
        // code
}

3.10、函数体长度不超过150行

3.11、单类体长度不超过300行

3.12、控制器长度不要超过800行

3.13、实现每个协议时,在单独的extension里来实现

Good

class MyViewController: UIViewController {
}

extension MyViewController: UITableViewDataSource {
}

extension MyViewController: UIScrollViewDelegate {
}

Bad

class MyViewController: UIViewController, UITableViewDataSource, UIScrollViewDelegate {
}

3.14、简单闭包,写在同一行

Good

let r = arr.filter { $0 % 2 == 0 }

Bad

let r = arr.filter {
    $0 % 2 == 0
}

3.15、优先使用let定义变量,而不是var

3.16、异常的分支,提前用guard结束。

Good

func process(value: Int) {
    guard value > 0 else {
        return
    }

    // code
}

Bad

func process(value: Int) {
    if value > 0 {
        // code
    }
}

3.17、尽可能使用private、fileprivate来限制作用域

Good

class MyClass {
    private func util() {   // 仅在类内部使用
    }
}

Bad

class MyClass {
    func util() {   // 仅在类内部使用
    }
}

3.18、不使用强制解包

Good

if let value = optional {
    // code
}

Bad

let value = optional!

3.19、不使用强制类型转换

Good

if let r = value as? String {
    // code
}

Bad

let r = value as! String

3.20、代码一定要写注释!

参考网址

微云iOS

你可能感兴趣的:(swift代码开发规范)