iOS Review

  1. 命名
    1. 缩写单词,不在首位的时候,要全部大写
    2. 避免引起歧义
      1. 没有点击功能的cell,不要用navigation
    3. 命名一般不用block,因为它一般指闭包
    4. 不要使用ki等命名
    5. 回调闭包命名,要体现触发时机
    6. 变量名要有意义、完整
    7. 通知命名:体现出所在类
    8. “验证XXX”命名为“validateXXX”
    9. struct、class、enum的首字母大写,变量、方法的首字母小写
    10. 单测的命名仍然用驼峰命名法
    11. NetworkConstants 里一般不写 URL
  2. 格式
    1. 代码过长,可以手动折行
    2. 运算符前后要加空格
    3. 闭包的参数和返回值放在 { 后面
    4. import 和 class 之间要有空行
    5. 点击事件,一般用extension单独拉出来,放在setup下面
    6. snapkit布局时,一条约束占一行
    7. “()”之间有多行时,“)”放在单独一行
    8. 增加多个协议时,把每个协议写在单独的extension中
    9. if都尽量加上else
    10. 变量和方法之间加上空行
    11. 参数过多、过长,可把每个参数放一行
    12. 多个元素的字典,把[]单独放在一行
  3. map代替for-in
  4. 从数组中删除元素时,一次把需要删除的删除掉
  5. 分割线:
    1. SeparatorCollectionViewLayout
    2. separatorView
  6. viewModel负责数据的处理
  7. 布局不要放在bindData
  8. 不建议使用equalToSuperview
  9. 不同的cell,配置不同时,可在bingData中处理
  10. 对cell的布局,一般把字视图添加到contentView中
  11. 线上不需要的代码,可用#if DEBUG包裹
  12. 外部不需要的属性,加上private
  13. rx也可以监听初始化时的赋值
  14. 随机数:Int.random
  15. 不可能走到的分支,可用assertionFailure()
  16. 字符串数组拼接成一个字符串:joined()
  17. 一般不使用lazy,可以把初始化方法,放在setupSubviews中
  18. 相对于safeArea布局:view.safeAreaLayoutGuide
  19. 通知的移除,在dealloc中
  20. 慎用字符的.isXXX方法
  21. 对view配置完成之后在添加到父视图中,最后在布局
  22. 如果方法没有用到self,应该写成static
  23. 时间戳以毫秒为单位
  24. 调用构造器时不需要写init
  25. 避免使用强制解包“!”
  26. 不要手动控制视图中的文本个数,设好约束会自动控制
  27. navigationBar中的按钮时buttonItem,不是button
  28. tableView和collectionView中的cell配置,不需要加indexPath的越界判断
  29. 界面一般都定义为let
  30. 判断是否拖拽出边界:用contentOffset、contentSize 和 frame 三者进行判断
  31. switch中case覆盖全部情况时,不需要写default
  32. init的参数可以不传frame参数,调用父类的init时,可以使用.zero
  33. 基本数据类型,都遵循Codable协议,不需要手动实现encode和decode
  34. 点击时cell高亮:
    1. tableView:重写touchesBegan、touchesEnded、touchesCancelled方法,设置view的背景色
    2. collectionView:设置cell的selectedBackgroundView属性
  35. 写单测时,用 XCTAssertEqual 会比XCTAssert得到更好的报错信息。
  36. 避免不稳定的测试:生成随机数等
  37. 增加table的key时,要加上预期上线的版本号
  38. 不会被继承的类(VC)加上final
  39. 不要在struct中添加业务逻辑,可在实例化时指定参数(数学有某属性,语文没有,此时在语文实例化时指定其为false或者nil即可)
  40. oc中获取数组第一个元素可用firstObject代替[0]
0%