美文网首页
Swift编码风格指导

Swift编码风格指导

作者: LeapDing | 来源:发表于2016-04-01 15:32 被阅读63次

    引见

    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<String>
    var employees: Dictionary<Int, String>
    var faxNumber: Optional<Int>
    

    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编码风格指导

          本文链接:https://www.haomeiwen.com/subject/tejylttx.html