# Swift 基本語法
在上一章節中我們已經講到如何創建 Swift 語言的 "Hello, World!" 程序。現在我們來復習下。
如果創建的是 OS X playground 需要引入 Cocoa :
```
import Cocoa
/* 我的第一個 Swift 程序 */
var myString = "Hello, World!"
print(myString)
```
如果我們想創建 iOS playground 則需要引入 UIKit :
```
import UIKit
var myString = "Hello, World!"
print(myString)
```
執行以上程序,輸出結果為:
```
Hello, World!
```
以上代碼即為 Swift 程序的基本結構,接下來我們來詳細說明結構的組成部分。
## Swift 引入
我們可以使用 **import** 語句來引入任何的 Objective-C 框架(或 C 庫)到 Swift 程序中。例如 **import cocoa** 語句導入了使用了 Cocoa 庫和API,我們可以在 Swift 程序中使用他們。
Cocoa 本身由 Objective-C 語言寫成,Objective-C 又是 C 語言的嚴格超集,所以在 Swift 應用中我們可以很簡單的混入 C 語言代碼,甚至是 C++ 代碼。
## Swift 標記
Swift 程序由多種標記組成,標記可以是單詞,標識符,常量,字符串或符號。例如以下 Swift 程序由三種標記組成:
```
print("test!")
標記是:單詞、符號
print
(
"test!"
)
```
## 注釋
Swift的注釋與C語言極其相似,單行注釋以兩個反斜線開頭:
```
//這是一行注釋
```
多行注釋以/*開始,以*/結束:
```
/* 這也是一條注釋,
但跨越多行 */
```
與 C 語言的多行注釋有所不同的是,Swift 的多行注釋可以嵌套在其他多行注釋內部。寫法是在一個多行注釋塊內插入另一個多行注釋。第二個注釋塊封閉時,后面仍然接著第一個注釋塊:
```
/* 這是第一個多行注釋的開頭
/* 這是嵌套的第二個多行注釋 */
這是第一個多行注釋的結尾 */
```
多行注釋的嵌套是你可以更快捷方便的注釋代碼塊,即使代碼塊中已經有了注釋。
## 分號
與其它語言不同的是,Swift不要求在每行語句的結尾使用分號(;),但當你在同一行書寫多條語句時,必須用分號隔開:
```
import Cocoa
/* 我的第一個 Swift 程序 */
var myString = "Hello, World!"; print(myString)
```
## 標識符
標識符就是給變量、常量、方法、函數、枚舉、結構體、類、協議等指定的名字。構成標識符的字母均有一定的規范,Swift語言中標識符的命名規則如下:
* 區分大小寫,Myname與myname是兩個不同的標識符;
* 標識符首字符可以以下劃線(_)或者字母開始,但不能是數字;
* 標識符中其他字符可以是下劃線(_)、字母或數字。
例如: userName、User_Name、_sys_val、身高等為合法的標識符,而2mail、room#和class為非法的標識符。
**注意:**Swift中的字母采用的是Unicode編碼[1]。Unicode叫做統一編碼制,它包含了亞洲文字編碼,如中文、日文、韓文等字符,甚至是我們在聊天工具中使用的表情符號
如果一定要使用關鍵字作為標識符,可以在關鍵字前后添加重音符號(`),例如:
## 關鍵字
關鍵字是類似于標識符的保留字符序列,除非用重音符號(`)將其括起來,否則不能用作標識符。關鍵字是對編譯器具有特殊意義的預定義保留標識符。常見的關鍵字有以下4種。
### 與聲明有關的關鍵字
| class | deinit | enum | extension |
|:--- |:--- |:--- |:--- |
| func | import | init | internal |
| let | operator | private | protocol |
| public | static | struct | subscript |
| typealias | var |
### 與語句有關的關鍵字
| break | case | continue | default |
|:--- |:--- |:--- |:--- |
| do | else | fallthrough | for |
| if | in | return | switch |
| where | while |
### 表達式和類型關鍵字
| as | dynamicType | false | is |
|:--- |:--- |:--- |:--- |
| nil | self | Self | super |
| true | _COLUMN_ | _FILE_ | _FUNCTION_ |
| _LINE_ |
### 在特定上下文中使用的關鍵字
| associativity | convenience | dynamic | didSet |
|:--- |:--- |:--- |:--- |
| final | get | infix | inout |
| lazy | left | mutating | none |
| nonmutating | optional | override | postfix |
| precedence | prefix | Protocol | required |
| right | set | Type | unowned |
| weak | willSet |
## Swift 空格
Swift語言并不是像C/C++,Java那樣完全忽視空格,Swift對空格的使用有一定的要求,但是又不像Python對縮進的要求那么嚴格。
在Swift中,運算符不能直接跟在變量或常量的后面。例如下面的代碼會報錯:
```
let a= 1 + 2
```
錯誤信息是:
```
error: prefix/postfix '=' is reserved
```
意思大概是等號直接跟在前面或后面這種用法是保留的。
下面的代碼還是會報錯(繼續注意空格):
```
let a = 1+ 2
```
錯誤信息是:
```
error: consecutive statements on a line must be separated by ';'
```
這是因為Swift認為到1+這個語句就結束了,2就是下一個語句了。
只有這樣寫才不會報錯:
```
let a = 1 + 2; // 編碼規范推薦使用這種寫法
let b = 3+4 // 這樣也是OK的
```
## Swift 字面量
所謂字面量,就是指像特定的數字,字符串或者是布爾值這樣,能夠直接了當地指出自己的類型并為變量進行賦值的值。比如在下面:
```
42 // 整型字面量
3.14159 // 浮點型字面量
"Hello, world!" // 字符串型字面量
true // 布爾型字面量
```
- Swift 簡介
- Swift 環境搭建
- Swift 基本語法
- Swift 數據類型
- Swift 變量
- Swift 可選(Optionals)類型
- Swift 常量
- Swift 字面量
- Swift 運算符
- Swift 條件語句
- Swift if 語句
- Swift if...else 語句
- Swift if...else if...else 語句
- Swift 嵌套 if 語句
- Swift switch 語句
- Swift 循環
- Swift for-in 循環
- Swift for 循環
- Swift While 循環
- Swift repeat...while 循環
- Swift Continue 語句
- Swift Break 語句
- Swift Fallthrough 語句
- Swift 字符串
- Swift 字符(Character)
- Swift 數組
- Swift 字典
- Swift 函數
- Swift 閉包
- Swift 枚舉
- Swift 結構體
- Swift 類
- Swift 屬性
- Swift 方法
- Swift 下標腳本
- Swift 繼承
- Swift 構造過程
- Swift 析構過程
- Swift 可選鏈
- Swift 自動引用計數(ARC)
- Swift 類型轉換
- Swift 擴展
- Swift 協議
- Swift 泛型
- Swift 訪問控制