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#deinitenum#extension
funcimportinitinternal
letoperatorprivateprotocol
#publicstaticstruct subscript
typealiasvar

break#casecontinue#defaultdoelsefallthroughforif inwhere
##與語句有關的關鍵字

return
switch

while

#as#as##dynamicTypefalseisnil#selfSelf
#表達式與型別關鍵字
##dynamicType

#super


true_COLUMN__FILE__FUNCTION_##_LINE_##在特定上下文中使用的關鍵字dynamic##finalgetinfixinoutlazyleftmutatingnonenonmutatingpostfix
#associativityconvenience
didSet

optional
override

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               // 布尔型字面量
###