[译]raywenderlich.com官方的swift风格指南(二)

来源:互联网 发布:欠淘宝贷款50万 编辑:程序博客网 时间:2024/05/22 01:40

函数声明

让函数声明短到能在一行内显示,包括左花括号:

func reticulateSplines(spline: [Double]) ->Bool{  // reticulate code goes here}

对于一些比较长的函数声明,可以在适当的地方换行,同时要在子行加上额外的缩进

func reticulateSplines(spline: [Double], adjustmentFactor: Double,    translateConstant: Int, comment: String) -> Bool{  // reticulate code goes here}

闭包表达式
只有当参数列表后面仅有一个单独的闭包表达式参数时,使用后关闭的语法。闭包的参数要给描述性的命名

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

对于内容很清晰的单个闭包表达式,使用隐式的返回

attendeeList.sort{ a, b in  a > b}

类型

推荐使用Swift的原生类型。Swift提供了OC的桥接,所以如果需要你仍然可以使用原生的全部方法

推荐
let width =120.0                                    // Doublelet widthString =(width as NSNumber).stringValue  // String
不推荐
let width: NSNumber = 120.0                          // NSNumberlet widthString: NSString =width.stringValue   // NSString

在SpriteKit的代码中,为了使代码更简洁,避免太多转换,使用CGFloat

常量

常量被关键字let定义,变量被关键字var定义,所以如果变量的值不改变推荐使用let而不是var
Tip:一个好的技巧就是先用let定义所有变量,只有当编译器报错了才改成var

可选

当变量或函数返回类型的值可为nil时,用?号声明其为可选类型
只有那些你知道会在使用前已初始化的实例变量,比如子视图会在viewDidLoad中建立中(涉及到的变量),你才能使用!号声明的拆包类型

当访问一个可选值时,使用可选链,如果值是仅被访问一次或者链中有许多个可选类型。

self.textContainer?.textLabel?.setNeedsDisplay()

使用可选(optional binding)绑定,会让一次拆包和执行多个操作更方便

if lettextContainer = self.textContainer {  // do many things with textContainer}

当命名可选变量或属性时,避免将他们命名为optionalString 或maybeView,因为他们在声明是就已经是声明为可选的了。
对于可选绑定来说,跟随原值命名而不是使用一些像unwrappedView或actualLabel

推荐
var subview: UIView?varvolume: Double?// later on...if let subview =subview, volume = volume {  // do something with unwrapped subviewand volume}
不推荐
var optionalSubview: UIView?var volume: Double?if letunwrappedSubview = optionalSubview {  if letrealVolume = volume {    // do something with unwrappedSubviewand realVolume  }}

结构初始化

使用原生的Swift结构初始化而不是传统的CGGeometry构造函数

推荐
let message ="Click the button"letcurrentBounds = computeViewBounds()varnames =[String]()let maximumWidth: CGFloat = 106.5
不推荐
let message: String = "Clickthe button"let currentBounds: CGRect =computeViewBounds()varnames: [String] =[]

注意:遵守这份指南意味着选择描述性命名比以往任何情况都重要。

语法糖

推荐更便捷的类型声明而不是写通用语法

推荐
var deviceModels: [String]var employees: [Int: String]varfaxNumber: Int?
不推荐
var deviceModels: Array<String>var employees: Dictionary<Int, String>varfaxNumber: Optional<Int>

控制流

推荐for-in而不是for-condition-increment类型

推荐
for _ in0..<3 {  println("Hello three times")}for (index, person) inattendeeList.enumerate() {  println("\(person) is at position #\(index)")}
不推荐
for vari = 0; i <3; i++ {  println("Hello three times")}for vari = 0; i <attendeeList.count;i++{  let person =attendeeList[i]  println("\(person) is at position #\(i)")}

分号

Swift不需要在你代码中的每个语句后加分号,只有当你需要在一行中写多个语句时才用到。

不要在一个单行上写多个语句。

只有在for-condition-increment结构的情况下需要用多个分号。然而有可选的for-in结构可以使用。

推荐
let swift ="not a scripting language"
不推荐
let swift ="not a scripting language";

注意:Swift和JavaScript非常不同,(JavaScript)省略分号通常是不安全的

语言

使用英式英语来拼写苹果的api

推荐
let color ="red"
不推荐
let colour ="red"
0 0
原创粉丝点击