> 1.0 翻譯:[dabing1022](https://github.com/dabing1022)?校對:[numbbbbb](https://github.com/numbbbbb)
>
> 2.0 翻譯+校對:[KYawn](https://github.com/KYawn)
本頁內容包括:
[TOC]
本書的這一節描述了Swift編程語言的形式語法。這里描述的語法是為了幫助您更詳細的了解該語言,而不是讓您直接實現一個解析器或編譯器。
Swift語言相對小一點,這是由于在Swift代碼中幾乎所有常見的類型、函數以及運算符都已經在Swift標準庫中定義了。雖然這些類型、函數和運算符并不是Swift語言自身的一部分,但是它們被廣泛應用于本書的討論和代碼范例中。
## 如何閱讀語法
用來描述Swift編程語言形式語法的標記遵循下面幾個約定:
* 箭頭(→)用來標記語法產式,可以理解為“可以包含”。
* *斜體*文字用來表示句法分類,并出現在一個語法產式規則兩側。
* 義詞和標點符號由粗體固定寬度的文本標記,而且只出現在一個語法產式規則的右側。
* 選擇性的語法產式由豎線(|)分隔。當可選用的語法產式太多時,為了閱讀方便,它們將被拆分為多行語法產式規則。
* 少數情況下,常規字體文字用來描述語法產式規則的右邊。
* 可選的句法分類和文字用尾標`opt`來標記。
舉個例子,getter-setter的語法塊的定義如下:
> GRAMMAR OF A GETTER-SETTER BLOCK
> _getter-setter-block_?→ {-?[*getter-clause*](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/getter-clause)?[-*setter-clause*-](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/setter-clause) *opt*?-}- | {-?[*setter-clause*](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/setter-clause)?[-*getter-clause*](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/getter-clause)-}-
這個定義表明,一個getter-setter方法??塊可以由一個getter子句后跟一個可選的setter子句構成,然后用大括號括起來,或者由一個setter子句后跟一個getter子句構成,然后用大括號括起來。下面的兩個語法產式等價于上述的語法產式,并明確指出了如何取舍:
> GRAMMAR OF A GETTER-SETTER BLOCK
> getter-setter-block → {-?[*getter-clause*](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/getter-clause)?[*setter-clause*-](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/setter-clause) *opt*-}--
> getter-setter-block → {-?[*setter-clause*](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/setter-clause)?[*-getter-clause*](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/getter-clause) -}-
- 介紹
- 歡迎使用 Swift
- 關于 Swift
- Swift 初見
- Swift 版本歷史記錄
- Swift1.0 發布內容
- Swift 教程
- 基礎部分
- 基本運算符
- 字符串和字符
- 集合類型
- 控制流
- 函數
- 閉包
- 枚舉
- 類和結構體
- 屬性
- 方法
- 下標腳本
- 繼承
- 構造過程
- 析構過程
- 自動引用計數
- 可選鏈
- 錯誤處理
- 類型轉換
- 嵌套類型
- 擴展
- 協議
- 泛型
- 權限控制
- 高級操作符
- 語言參考
- 關于語言參考
- 詞法結構
- 類型
- 表達式
- 語句
- 聲明
- 特性
- 模式
- 泛型參數
- 語法總結
- 蘋果官方Blog官方翻譯
- Access Control 權限控制的黑與白
- 造個類型不是夢-白話Swift類型創建
- WWDC里面的那個“大炮打氣球”
- Swift與C語言指針友好合作
- 引用類型和值類型的恩怨
- 訪問控制和Protected
- 可選類型完美解決占位問題