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!")

以上語句由 3 個符號組成:單詞( print )、符號( ( )、字串( "test" )。

print
(
   "test!"
)

註釋

Swift的註釋與C語言極其相似,單行註釋以兩個反斜線開頭:

//這是一行註釋

多行註釋以/*開始,以*/結束:

/* 這也是一條註釋,
但跨越多行 */

與 C 語言的多行註釋有所不同的是,Swift 的多行註釋可以巢狀在其他多行註釋內部。寫法是在一個多行註釋塊內插入另一個多行註釋。第二個註釋塊封閉時,後面仍然接著第一個註釋塊:

/* 這是第一個多行註釋的開頭

/* 這是巢狀的第二個多行註釋 */

這是第一個多行註釋的結尾 */

多行註釋的巢狀是你可以更快捷方便的註釋程式碼塊,即使程式碼塊中已經有了註釋。


分號

與其它語言不同的是,Swift不要求在每行語句的結尾使用分號(;),但當你在同一行書寫多條語句時,必須用分號隔開:

import Cocoa
/* 我的第一個 Swift 程式 */
var myString = "Hello, World!"; print(myString)

識別符號

識別符號就是給變數、常量、方法、函式、列舉、結構體、類、協議等指定的名字。構成識別符號的字母均有一定的規範,Swift語言中識別符號的命名規則如下:

  • 區分大小寫,Mynamemyname是兩個不同的識別符號;

  • 識別符號首字元可以以下劃線(_)或者字母開始,但不能是數字;

  • 識別符號中其他字元可以是下劃線(_)、字母或數字。

例如: userName、User_Name、_sys_val、身高等為合法的識別符號,而2mail、room#和class為非法的識別符號。

注意:Swift中的字母採用的是Unicode編碼[1]。Unicode叫做統一編碼制,它包含了亞洲文字編碼,如中文、日文、韓文等字元,甚至是我們在聊天工具中使用的表情符號

如果一定要使用關鍵字作為識別符號,可以在關鍵字前後新增重音符號(`),例如:

let `class` = "itread01"

關鍵字

關鍵字是類似於識別符號的保留字元序列,除非用重音符號(`)將其括起來,否則不能用作識別符號。關鍵字是對編譯器具有特殊意義的預定義保留識別符號。常見的關鍵字有以下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 使用 print 函式列印輸出:

print("itread01") // 輸出 itread01

print 函式是一個全域性函式,完整的函式簽名為:

public func print(items: Any..., separator: String = default, terminator: String = default)

如果我們想讓其不換行輸出,只需要將最後一個引數賦值為空字串即可:

for x in 0...10{
    print("\(x) ", terminator: "")
}
print()

輸出結果為:

0 1 2 3 4 5 6 7 8 9 10 

如果你需要接收使用者的輸入可以使用 readLine():

let theInput = readLine()