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語言中識別符號的命名規則如下:
-
區分大小寫,Myname與myname是兩個不同的識別符號;
-
識別符號首字元可以以下劃線(_)或者字母開始,但不能是數字;
-
識別符號中其他字元可以是下劃線(_)、字母或數字。
例如: 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()