Swift编码风格指导

引见

Swift的编码风格大部分和OC的编码风格一致,在前一篇文章Objective-C编程风格指南中已经提出,在这里就不重复了,只写一些不同的地方。

空格

直接上例子
首选:

if user.isHappy {
  // Do something
} else {
  // Do something else
}

Not 首选:

if user.isHappy
{
    // Do something
}
else {
    // Do something else
}

Self的使用

一般为了简洁,不需要使用self去引用属性,区分参数与属性需要使用self,在闭包表达式中引用属性需要使用self。

class BoardLocation {
  let row: Int, column: Int

  init(row: Int, column: Int) {
    self.row = row
    self.column = column
    
    let closure = {
      println(self.row)
    }
  }
}

协议的使用

当给一个类添加协议时,最好为类写一个遵循这个协议的类扩展。这样有利于把协议的方法与协议联系在一起。
记得用// MARK: -添加一个协议注释。

首选:

class MyViewcontroller: UIViewController {
  // class stuff here
}

// MARK: - UITableViewDataSource
extension MyViewcontroller: UITableViewDataSource {
  // table view data source methods
}

// MARK: - UIScrollViewDelegate
extension MyViewcontroller: UIScrollViewDelegate {
  // scroll view delegate methods
}

Not 首选:

class MyViewcontroller: UIViewController, UITableViewDataSource, UIScrollViewDelegate {
  // all methods
}

计算属性

当计算属性为只读时,一般直接返回值即可,只有当提供了set方法时,需要提供get方法。
首选:

var diameter: Double {
  return radius * 2
}

Not 首选:

var diameter: Double {
  get {
    return radius * 2
  }
}

类型声明

Swift拥有很好的自动类型推断。
首选:

let width = 120.0                                    // Double
let widthString = (width as NSNumber).stringValue    // String

Not 首选:

let width: NSNumber = 120.0                          // NSNumber
let widthString: NSString = width.stringValue        // NSString

可选值

使用可选值之前,应该进行非空判断。
首选:

var subview: UIView?
var volume: Double?

// later on...
if let subview = subview, volume = volume {
  // do something with unwrapped subview and volume
}

Not 首选:

var optionalSubview: UIView?
var volume: Double?

if let unwrappedSubview = optionalSubview {
  if let realVolume = volume {
    // do something with unwrappedSubview and realVolume
  }
}

结构初始化

首选:

let bounds = CGRect(x: 40, y: 20, width: 120, height: 80)
let centerPoint = CGPoint(x: 96, y: 42)

Not 首选:

let bounds = CGRectMake(40, 20, 120, 80)
let centerPoint = CGPointMake(96, 42)

泛型声明

首选:

var deviceModels: [String]
var employees: [Int: String]
var faxNumber: Int?

Not 首选:

var deviceModels: Array
var employees: Dictionary
var faxNumber: Optional

For循环

使用for-in循环代替一般for循环方式。

首选:

for _ in 0..<3 {
  println("Hello three times")
}

for (index, person) in attendeeList.enumerate() {
  println("\(person) is at position #\(index)")
}

Not 首选:

for var i = 0; i < 3; i++ {
  println("Hello three times")
}

for var i = 0; i < attendeeList.count; i++ {
  let person = attendeeList[i]
  println("\(person) is at position #\(i)")
}

你可能感兴趣的:(Swift编码风格指导)