iOS代码规范

类和函数声明:
  1. 类名大驼峰、函数名小驼峰
  2. 所有大括号前有1个空格, 跟随在当前类或函数名之后, 不换行
  3. 类和函数要写注释 , 使用 /// 或 /** */来注释
  4. 方法上边需要以后1行间隔. 《所有间隔不能超过1行》
/// 我的
class MyClass {
    /**
     * 添加
     * @param  value  参数1
     */
    private func add(value: Int) {
        // code
    }

    /// 方法一
    func myMethod1() {
        // code
    }
}
错误方式: 没写注释, 冒号后没空格, 大括号前没有空格
func add(value:Int){
}
func myMethod1()
{
}
尽可能使用private、fileprivate来限制作用域
fileprivate class MyClass {
    private func add() {
    }
}
冒号, 逗号:
  1. 所有(冒号 “:” 逗号“,”) 前面不加空格, 后面须加1个空格
class MyClass {
    private lazy var titleBtn: UIButton = configure(.init()) {
        $0.setTitle("标题按钮", for: .normal)
    }
    private let array: [Int] = [1, 2, 3]
    func method1(value1: Int) { 
        // code
    }
}
self非必要时不使用:
class MyClass: UIViewController {
    private lazy var titleBtn: UIButton = configure(.init()) {
        $0.setTitle("标题按钮", for: .normal)
    }
    
    func method1(value1: Int) {
        // 正确
        view.addSubview(titleBtn)
        // 错误
        view.addSubview(self.titleBtn)
    }
}
属性声明:
  1. 属性命名使用小驼峰
  2. 各个组件命名后缀带组件类型, 如UILabel组件命名 xxxLab
  3. 属性声明统一使用configure
  4. 按钮UIButton的点击事件在属性中声明, 点击事件统一命名 actionXxxx
  5. 属性之间无需空格
class MyClass {
    private let titleLab: UILabel = configure(.init()) {
        $0.text = "标题名"
    }
    private lazy var titleBtn: UIButton = configure(.init()) {
        $0.setTitle("标题按钮", for: .normal)
        $0.addTarget(self, action: #selector(titleAction), for: .touchUpOutside)
    }
    private let titleImage: UIImageView = configure(.init()) {
        $0.contentMode = .scaleAspectFill
    }
}
闭包:
  1. 内部使用$0来调用组件属性
        let titleLab: UILabel = configure(.init()) {
            $0.text = "标题名"
        }

        titleLab.snp.makeConstraints {
            $0.edges.equalToSuperview()
        }
  1. 弱引用的判断命名使用 _self , 不能强制解包 self!
        var closure = {[weak self] in
            guard let _self = self else {
                return
            }
            // 错误方式
            self!.array = []
        }
  1. 高级运算符,简单的闭包一行显示
let tempArray = arr.filter { $0 == 1 }
解包方式:
正确方式
if let value = optional {
    // code
}

if let value = optionalValue as? String {
    // code
}
错误方式
let value = optional!
let value = optionalValue as! String
运算符、操作符前后都要有空格:
let count = 1 + 2

let status = 1 ..< 2

func add() -> Int {
    return 1 + 2
}
注释:
  1. 注释写在代码上边
  2. 函数注释 /// 或 /** */ , 函数内部作用域使用 //
/// 方法一
func method1(value1: Int) {
     // 相加
     let count = 1 + 2
}

/**
* 添加
* @param  value   参数1
* @param  value2  参数2
*/
private func method2(value: Int, value2: Int) {
      // code
}
if else:

else跟if右边大括号之后, esle前后需加1个空格

if flag {
    // code
} else {
    // code
}
switch:

case跟switch左对齐

switch value {
case 1:
    // code
case 2:
    // code
default:break
}
不使用try!:
// 正确
let value = try? decodeData()
// 错误
let value = try! decodeData()
单行尽量不要超过120个字符:
函数体长度不超过100行:
代理协议:

需要使用extension来单独的实现

class MyClass: UIViewController {
}

// MARK: - UITableViewDataSource/Delegate
extension MyClass: UITableViewDataSource, UITableViewDelegate {
}

// MARK: - UserInfoDelegate
extension MyClass: UserInfoDelegate {
}
网络层:

需要使用extension来单独的实现, 并且放在类的最后面

// MARK: - NetWork
extension MyClass {
    /// 加载数据1
    private func loadData() {
        // code
    }

    /// 加载数据2
    private func loadOtherData() {
        // code
    }
}
MVC类的层次结构:
/// 我的主页
class MyClass: UIViewController {
    // MARK: - Property
    private lazy var titleBtn: UIButton = configure(.init()) {
        $0.setTitle("标题按钮", for: .normal)
        $0.addTarget(self, action: #selector(titleAction), for: .touchUpInside)
    }
    
    // MARK: - Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    // MARK: - Method
    private func add1() {
        // code
    }

    // MARK: - MethodPublic
    func add() {
        // code
    }

    // MARK: - Actions
    /// 标题按钮点击
    @objc private func titleAction() {
        // code
    }

}

// MARK: - UITableViewDataSource/Delegate
extension MyClass: UITableViewDataSource, UITableViewDelegate {
    
}

// MARK: - NetWork
extension MyClass {
    /// 加载数据1
    private func loadData() {
        // code
    }

    /// 加载数据2
    private func loadOtherData() {
        // code
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • iOS编程规范0规范 0.1前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可 测试、高效...
    iOS行者阅读 4,459评论 21 35
  • 一、命名规范 1、统一要求含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释,使用全称,不使用缩写。 ...
    Untils阅读 564评论 0 0
  • 公司代码规范(创业邦内部使用) 命名基础 在⾯面向对象软件库的设计过程中,开发人员经常忽视对类,方法,函数,常量以...
    xiao小马哥阅读 405评论 0 0
  • 这里有些关于编码风格Apple官方文档,如果有些东西没有提及,可以在以下文档来查找更多细节: The Object...
    Loki9527阅读 397评论 0 0
  • iOS Coding Guidelines(代码指南) 一、命名基础 驼峰命名 针对属性、变量、方法等均采用小写字...
    抢手的哥阅读 576评论 0 1