[译]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"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,757评论 1 10
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,324评论 0 25
  • 1、范型范型所解决的问题 函数、方法、类型:类,结构体,枚举,元组类型,协议参数,返回值,成员函数参数,成员属性类...
    我是小胡胡分胡阅读 790评论 0 1
  • Hello Word 在屏幕上打印“Hello, world”,可以用一行代码实现: 你不需要为了输入输出或者字符...
    restkuan阅读 3,132评论 0 5
  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,327评论 1 5