Swift开发规范

2023-10-30  本文已影响0人  galenu

一. 命名规范:

class LoginName { } 
enum SexType { }
var loginName: String
func getMessageInfo() 
home_preview_invisible
button_bg_normal
正例:class RoundAnimatingButton: UIButton {}
反例:class CustomButton: UIButton {}  / AbstractClass 缩写成 AbsClass

二. 基本标准:

正例:
    extension UIView {
        public func removeAllSubView() {}
    }
反例:
    public extension UIView {
        func removeAllSubView() {}
    }
正例:
    class ApplicationServiceManager {
        public static let shared =  ApplicationServiceManager()
        private init {}
    }
// MARK: - Life Cycle
    
    // MARK: - UI
    
    /// 设置UI
    private func setupUI() {
        
    }
    
    // MARK: - Event
        
    // MARK: - Public method
    
    // MARK: - Private method
    
    // MARK: - 系统delegate
    
    // MARK: - 自定义delegate
    
    // MARK: - 第三方delegate
    
    // MARK: - Api
// TODO: - 待完成功能
#warning("异常功能")
正例:   
  let timer = Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { [weak self] _ in        
      guard let self = self else { return }     
      self.timerHandle()    
 }

三. 格式规范:

/**
 涉及规约
 1、类左大括号不另起一行;
 2、类继承后跟空格;
 */

/// 格式规约示例
class FormatSample: NSObject {
    /**
     涉及规约
     1、注释符号与注释内容之前有空格;
     2、每一行只声明一个变量;
     3、不使用分号;
     4、注释另起一行,不放在行尾;
     5、数组、元祖、字典里的逗号后面有一个空格;
     */

    private var resultCode = ""
    private var resultArr = ["one", "two"]
    private var resultDic = ["key": "name", "value": "张三"]
    private var resultTuple = (key: "name", value: "张三")
}

/**
 涉及规约
 1、方法之间空一行;
 2、重载的声明放在一起,按照按照参数的多少从少到多排序;
 3、返回值 -> 两遍增加空格;
 4、参数名与类型之间空格;
 5、如果大括号内为空,则直接简写为{},括号内不换行;
 6、if 后面的 else\else if, 跟着上一个 if\else if 的右括号;
 7、解包时推荐使用原有名字;
 */
extension FormatSample {
    private func logInfo(message: String) {
        logInfo(message: message, type: nil)
    }

    private func logInfo(message: String, type: String?) {
        if let type = type {
            print("\(type): \(message)")
        } else {
            print(message)
        }
    }

    private func canLog() -> Bool {
        #if DEBUG
            return true
        #else
            return false
        #endif
    }

    /**
     涉及规约
     1、switch 中, case 跟 switch 左对齐;
    */
    private func showSwitchStandardFormat() {
      let count = 10
      switch count {
      case 1:
        print(1)
      // 如case包含所有情况,可不加default,如遍历枚举类型时
      default:
        break
      }
    }
}
/// 会自动生成 init(name: String) 这样的构造函数,如果符合使用,不要再手动添加该构造函数 
struct LoginInfo {  
     var name: String
 }
正例:
  let loginView = UIView()
反例:
  let loginView = UIView.init()
正例:
    var info: String {
      return ""
    }
反例:
    var info: String {
      get {
        return ""
      }
    }
正例:var info = ""
反例:var info: String = ""
正例:var info = ""
反例:internal var info = ""
enum Sex {
  case male
  case female
}
正例:let sex: Sex = .male
反例:let sex: Sex = Sex.male
let count = 10
switch count {
case 1:
  print(1)
  // 此处不用显式添加break,Swift中每个case都会默认break。
}
正例:func getMessageInfo() {}
反例:func getMessageInfo() -> Void {}

四. 注释规范

// MARK: - View子视图操作相关

extension UIView {
    /// 同时添加多个视图
    /// - Parameter subviews: 子View可变参数
    public func addSubviews(_ subviews: UIView...) {
        subviews.forEach(addSubview)
    }

    /// 移除所有子View
    public func removeAllSubview() {
        subviews.forEach {
          $0.removeFromSuperview()
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读