制定自己的Swift编码规范

警告

尽量将所有警告都处理掉。

命名

1.使用具有描述性的名称,
2.使用驼峰式命名规则给类方法和变量等命名。
3.类别名称(类,结构体,枚举和协议)首字母大写,方法或者变量的首字母小写。

// 常量
private let maximumWidgetCount = 100

// 方法
func setupWidget() ->{
    print("ok")
}

// 类
class WidgetContainer {
    var widgetButton: UIButton  
    let  widgetHeightPercentage = 0.85
}

缩进

1.使用四个空格进行缩进
2.每行最多160个字符,这样可以避免一行过长。
3.确保每个文件结尾都有空白行。
4.代码结尾不要使用分号;
5.在逗号后面加一个空格

let numberArray = [1, 3, 6, 10]

6.不要使用 as! 或 try!
推荐

// 使用if let as?判断
if let text = text as? String {
    /* ... */
}

// 使用if let try 或者 try?
if let test = try aTryFuncton() {
    /* ... */
}

Closure Expressions(闭包表达式)
闭包放在最后面

// Preferred(推荐)
UIView.animateWithDuration(1.0) {
  self.myView.alpha = 0
}

UIView.animateWithDuration(1.0,
  animations: {
    self.myView.alpha = 0
  },
  completion: { finished in
    self.myView.removeFromSuperview()
  }
)

// Not Preferred(不推荐)
UIView.animateWithDuration(1.0, animations: {
  self.myView.alpha = 0
})

UIView.animateWithDuration(1.0,
  animations: {
    self.myView.alpha = 0
  }) { f in
    self.myView.removeFromSuperview()
}

7.命名应该具有描述性 和 清晰的。
不要缩写,简写命名,或用单个字母命名。
如果原有命名不能明显表明类型,则属性命名内要包括类型信息。

// 推荐
class RoundAnimatingButton: UIButton { /* ... */ }
// 不推荐
class CustomButton: UIButton { /* ... */ }

// 推荐
class ConnectionTableViewCell: UITableViewCell {
    //这个不是 UIImage, 不应该以Image 为结尾命名。
    ✅let personImageView: UIImageView
    ❌let personImage: UIImageView 
   
    // 建议使用 animationDuration 或 animationTimeInterval
    ✅let animationDuration: NSTimeInterval
    ❌let animation: NSTimeInterval

    // transition 不能清晰表达出是String
    ✅let transitionText: String
    ✅let transitionString: String
    ❌let transition: String

    // 作为属性名的firstName,很明显是字符串类型,所以不用在命名里不用包含String
    ✅let firstName: String
    ✅let firstNameLabel: UILabel

    // 因用snapkit来布局,页面默认都是ViewController, 所以这个简化
    ✅let testController: UIViewController

    // 当使用outlets时, 确保命名中标注类型。为了保持一致性,建议把类型放到变量的结尾,而不是开始,如submitButton
    ✅@IBOutlet weak var submitButton: UIButton!
    ✅@IBOutlet weak var emailTextField: UITextField!
    ✅@IBOutlet weak var nameLabel: UILabel!

    // 常量统一用全大写,下划线连线
    enum Dict: String {
        case AAA_BBB
        case CCC_DDD
    }

    // Localizable.strings
    "ALERT_TITLE" = "测试";
    "ALERT_CONTENT_UNLOGIN" = "请登录";
    "ALERT_ACTION_OK" = "好的";
    "ALERT_ACTION_CANCEL" = "取消";
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容