[譯]raywenderlich.com官方的swift風(fēng)格指南(二)

函數(shù)聲明

讓函數(shù)聲明短到能在一行內(nèi)顯示,包括左花括號(hào):

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

對(duì)于一些比較長的函數(shù)聲明,可以在適當(dāng)?shù)牡胤綋Q行,同時(shí)要在子行加上額外的縮進(jìn)

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

閉包表達(dá)式
只有當(dāng)參數(shù)列表后面僅有一個(gè)單獨(dú)的閉包表達(dá)式參數(shù)時(shí),使用后關(guān)閉的語法。閉包的參數(shù)要給描述性的命名

推薦
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()
}

對(duì)于內(nèi)容很清晰的單個(gè)閉包表達(dá)式,使用隱式的返回

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的代碼中,為了使代碼更簡(jiǎn)潔,避免太多轉(zhuǎn)換,使用CGFloat

常量

常量被關(guān)鍵字let定義,變量被關(guān)鍵字var定義,所以如果變量的值不改變推薦使用let而不是var
Tip:一個(gè)好的技巧就是先用let定義所有變量,只有當(dāng)編譯器報(bào)錯(cuò)了才改成var

可選

當(dāng)變量或函數(shù)返回類型的值可為nil時(shí),用?號(hào)聲明其為可選類型
只有那些你知道會(huì)在使用前已初始化的實(shí)例變量,比如子視圖會(huì)在viewDidLoad中建立中(涉及到的變量),你才能使用!號(hào)聲明的拆包類型

當(dāng)訪問一個(gè)可選值時(shí),使用可選鏈,如果值是僅被訪問一次或者鏈中有許多個(gè)可選類型。

self.textContainer?.textLabel?.setNeedsDisplay()

使用可選(optional binding)綁定,會(huì)讓一次拆包和執(zhí)行多個(gè)操作更方便

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

當(dāng)命名可選變量或?qū)傩詴r(shí),避免將他們命名為optionalString 或maybeView,因?yàn)樗麄冊(cè)诼暶魇蔷鸵呀?jīng)是聲明為可選的了。
對(duì)于可選綁定來說,跟隨原值命名而不是使用一些像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
  }
}

結(jié)構(gòu)初始化

使用原生的Swift結(jié)構(gòu)初始化而不是傳統(tǒng)的CGGeometry構(gòu)造函數(shù)

推薦
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)")
}

分號(hào)

Swift不需要在你代碼中的每個(gè)語句后加分號(hào),只有當(dāng)你需要在一行中寫多個(gè)語句時(shí)才用到。

不要在一個(gè)單行上寫多個(gè)語句。

只有在for-condition-increment結(jié)構(gòu)的情況下需要用多個(gè)分號(hào)。然而有可選的for-in結(jié)構(gòu)可以使用。

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

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

語言

使用英式英語來拼寫蘋果的api

推薦
let color ="red"
不推薦
let colour ="red"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,181評(píng)論 1 10
  • 一直沒有時(shí)間好好看一下swift,最近復(fù)習(xí)了一遍語法,這里記錄swift學(xué)習(xí)過程中遇到的一些問題和要點(diǎn),和Obje...
    bomo閱讀 2,544評(píng)論 0 25
  • 1、范型范型所解決的問題 函數(shù)、方法、類型:類,結(jié)構(gòu)體,枚舉,元組類型,協(xié)議參數(shù),返回值,成員函數(shù)參數(shù),成員屬性類...
    我是小胡胡123閱讀 941評(píng)論 0 1
  • Hello Word 在屏幕上打印“Hello, world”,可以用一行代碼實(shí)現(xiàn): 你不需要為了輸入輸出或者字符...
    restkuan閱讀 3,360評(píng)論 0 6
  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫在分支后用逗號(hào)分開。如果任何模式...
    無灃閱讀 1,550評(píng)論 1 5

友情鏈接更多精彩內(nèi)容