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

函数声明

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

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                                    // Double
let widthString =(width as NSNumber).stringValue  // String
不推荐
let width: NSNumber = 120.0                          // NSNumber
let 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?
var
volume: Double?

// later on...
if let subview =subview, volume = volume {
  // do something with unwrapped subview
and volume
}
不推荐
var optionalSubview: UIView?
var volume: Double?

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

结构初始化

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

推荐
let message ="Click the button"
letcurrentBounds = computeViewBounds()
var
names =[String]()
let maximumWidth: CGFloat = 106.5
不推荐
let message: String = "Click
the 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) in
attendeeList.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值