關(guān)于Swift
Swift 是一種新的編程語(yǔ)言,主要用于IOS 和 Mac OS X 應(yīng)用程序的開(kāi)發(fā)。盡管如此,Swift 的許多部分和 C 和 Objective - C 語(yǔ)言類(lèi)似。
Swift 提供自己的語(yǔ)言類(lèi)型版本,所有的都是基于 C 和 Objective - C 的基本類(lèi)型,包括 Int、Double 、 Float 、Bool、String 。Swift還提供了強(qiáng)大的兩個(gè)集合類(lèi)型版本:Array 和 Dictionary 。
像 C 語(yǔ)言一樣,Swift 通過(guò)變量來(lái)存儲(chǔ)和通過(guò)明確的變量名來(lái)關(guān)聯(lián)值。Swift 還大量的變量的值不能被改變,這些被稱(chēng)為常量,而且比 C 語(yǔ)言更強(qiáng)大。在 Swift 中,常量的使用會(huì)使代碼更安全、所要表達(dá)的意圖更清晰。
除了熟悉的類(lèi)型,Swift 引入了在 Objective - C中沒(méi)有的更先進(jìn)的類(lèi)型。比如元組,通過(guò)元組,您能夠創(chuàng)建和傳遞一組值。在作為函數(shù)的返回值時(shí),通過(guò)元組可以返回多個(gè)值。
Swift 也引入了可選(Optional)類(lèi)型,用于處理缺失值的情況。可選(Optional)類(lèi)型表示:“有一個(gè)值,它等于x” 或 “沒(méi)有值”。可選(Optional)類(lèi)型類(lèi)似于在 Objective - C 中使用 nil ,但它可用于任何類(lèi)型,不僅僅是類(lèi)。相比于 Objective - C中的 nil ,可選(Optional)類(lèi)型更加安全,更具表現(xiàn)力。是 Swift 許多最強(qiáng)大功能的重要組成部分。
事實(shí)上,Swift是一種更安全的語(yǔ)言,可選(Optional)就是一個(gè)例子。Swift 可以幫助你認(rèn)清代碼中值的類(lèi)型。如果你的代碼的預(yù)期一個(gè)字符串,類(lèi)型安全會(huì)防止你誤入一個(gè)Int。這可以使您在開(kāi)發(fā)過(guò)程能夠盡早捕獲并修復(fù)錯(cuò)誤。
常量和變量
常量和變量把一個(gè)名稱(chēng)(如 maximumNumberOfLoginAttempts 或 welcomeMessage )與某一特定類(lèi)型的值(比如 10 或 “Hello” )關(guān)聯(lián)起來(lái)。 常量的值一旦設(shè)置不能改變,而一個(gè)變量可以設(shè)置為不同的值。
聲明常量和變量
常量和變量必須在使用之前聲明。用 let 關(guān)鍵字聲明常量,用 var 關(guān)鍵字聲明變量。下面是一個(gè)示例,如何使用常量和變量來(lái)統(tǒng)計(jì)用戶嘗試登錄的次數(shù)。
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
這段代碼可以理解為:
“聲明一個(gè)名稱(chēng)為 maximumNumberOfLoginAttempts 的常量,并初始化值 10 。 聲明一個(gè)名稱(chēng)為 currentLoginAttempt 的變量,并初始化值為 0。”
在這個(gè)例子中,允許的最大嘗試登錄次數(shù)被聲明為一個(gè)常量,因?yàn)樽畲笾挡粫?huì)改變。當(dāng)前的登錄嘗試計(jì)數(shù)器被聲明為一個(gè)變量,因?yàn)檫@個(gè)值在登錄失敗后必須增加。
您可以在一行中聲明多個(gè)常量或多個(gè)變量,由逗號(hào)分隔:
var x = 0.0, y = 0.0, z = 0.0
注意:如果在代碼中存儲(chǔ)的值不會(huì)改變,就用 let 關(guān)鍵字聲明這是一個(gè)常量。變量用于存儲(chǔ)需要改變的值。
類(lèi)型標(biāo)注
您可以為常量或變量添加類(lèi)型標(biāo)注(type annotation),這樣就清楚常量或變量可以存儲(chǔ)的值的類(lèi)型。添加類(lèi)型標(biāo)注的方法是:在常量或變量名后加冒號(hào),再加一個(gè)空格,最后是類(lèi)型的名稱(chēng)。
這個(gè)示例給變量 welcomeMessage 加了一個(gè)類(lèi)型標(biāo)注,表明它只可以存儲(chǔ) String 類(lèi)型的值。
var welcomeMessage: String
“冒號(hào)” 意味著“是...類(lèi)型”,所以上面的代碼可以解讀為:
“聲明一個(gè)名稱(chēng)為welcomeMessage的變量,是String類(lèi)型的。”
“是String類(lèi)型的”這個(gè)短語(yǔ)的意思是“可以存儲(chǔ)任何字符串值。”
welcomeMessage 現(xiàn)在可以存儲(chǔ)任何字符串值。
welcomeMessage = "Hello"
注意:一般來(lái)說(shuō)很少需要寫(xiě)類(lèi)型標(biāo)注。在聲明常量或者變量的時(shí)候賦了一個(gè)初始值,Swift可以推斷出這個(gè)常量或者變量的類(lèi)型。
命名常量和變量
你可以使用任何字符命名常量和變量名,包括Unicode。
let n = 3.14159
let 你好 = "你好世界"
let □ □ = "dogcow"
常量與變量名不能包含數(shù)學(xué)符號(hào)、箭頭、保留的(或者非法的)Unicode 碼、連線與制表符。不能以數(shù)字開(kāi)頭,但是可以在變量名的其他地方包含數(shù)字。
一旦命名了某種類(lèi)型為常量或變量,就不能再用相同名稱(chēng)重復(fù)命名,不能改變它存儲(chǔ)值的類(lèi)型,也不能改變一個(gè)常量為變量或改變一個(gè)變量為常量。
注意:如果你需要命名一個(gè)常量或變量名稱(chēng)為保留關(guān)鍵字,你可以使用反引號(hào)(‘)包括關(guān)鍵字作為變量名稱(chēng)。當(dāng)然,最好避免使用關(guān)鍵字作為名稱(chēng),除非別無(wú)選擇。
可以改變變量的值為另一個(gè)相同類(lèi)型的值。在下面的例子中,friendlyWelcome 的值從“Hello!”改為“Bonjour!”。
var friendlyWelcome = "Hello! "
friendlyWelcome = "Bonjour! "
// friendlyWelcome is now "Bonjour! "
不同于變量,常量的值是不能改變的。如果試圖改變,那么編譯器將報(bào)告一個(gè)錯(cuò)誤:
let languageName = "Swift"
languageName = "Swift++"
// this is a compile-time error - languageName cannot be changed
打印常量和變量
使用 print 函數(shù)可以打印一個(gè)常量或變量的值:
print(friendlyWelcome)
// prints "Bonjour! "
print 是一個(gè)全局函數(shù),輸出值并且換行,如果你用 Xcode, print 將輸出在 Xcode 的“console”(控制臺(tái))中。
print函數(shù)打印傳遞給它的任何字符串:
print("This is a string")
// prints "This is a string"
print 函數(shù)可以打印更復(fù)雜的信息,與 Cocoa 里的 NSLog 函數(shù)類(lèi)似。這些信息可以包含常量和變量的值。
Swift 使用字符串插值(string interpolation)的方式,把常量或變量的名稱(chēng)作為一個(gè)占位符加入到一個(gè)長(zhǎng)字符串中,Swift會(huì)用常量或變量的值取代他們。將常量或變量名放入圓括號(hào)中,并在開(kāi)括號(hào)前使用反斜杠將其轉(zhuǎn)義:
print("The current value of friendlyWelcome is \(friendlyWelcome)")
// prints "The current value of friendlyWelcome is Bonjour! "
注釋
在代碼中使用注釋?zhuān)梢苑奖愦a閱讀。注釋會(huì)被Swift編譯器忽略。
Swift的注釋非常類(lèi)似于C 語(yǔ)言。單行注釋使用斜杠(//):
// this is a comment
也可以使用多行注釋?zhuān)孕备苄翘?hào)(/)開(kāi)始,并以星號(hào)斜杠結(jié)束(/) :
/* this is also a comment,
but written over multiple lines */
與 C 語(yǔ)言多行注釋不同,在Swift中多行注釋可以嵌套。先寫(xiě)一個(gè)多行注釋塊,然后在這個(gè)注釋塊中嵌套另一個(gè)多行注釋?zhuān)?/p>
/* this is the start of the first multiline comment
/* this is the second, nested multiline comment */
this is the end of the first multiline comment */
嵌套多行注釋能夠使你更快速、輕松地注釋掉大量的代碼,即使已經(jīng)包含多行注釋塊。
語(yǔ)句結(jié)束(;)
不同于許多其他語(yǔ)言,Swift不要求為每個(gè)語(yǔ)句的結(jié)尾處加一個(gè)分號(hào)( ; ),盡管你可以這樣做(如果你愿意)。
但是,如果你想在一行中寫(xiě)多個(gè)獨(dú)立的語(yǔ)句時(shí),分號(hào)是必需的。
let cat = "miao";println(cat)
//prints "miao"