蘋果新的編程語言 Swift 語言進階(二)--基本數據類型
一 、 常量和變量
Swift語言 對常量和變量的聲明進行了明白的區分
Swift語言的常量類型比C 語言的constants類型更加強大,語義更加明白。
常量和變量的差別是常量在設置或初始化後其值不同意改變,而變量同意。除此之外。Swift語言中變量類型能使用的地方,常量類型也相同能使用,如作為輸入參數等。
Swift語言中常量類型使用let keyword進行聲明,變量類型使用var keyword進行聲明,如
var currentLoginAttempt =0
以上語句聲明了一個名字為maximumNumberOfLoginAttempts的常量,其值為10;接著又聲明了一個名字為currentLoginAttempt的變量。其初始值為0。
假設一行中僅僅有一條語句,語句最後就不須要帶分號。假設一行中帶有多條語句,語句之間就須要加分號,而最後一條不須要,這也體現和反應了Swift語言語法設計簡潔和明白的思想。例如以下面語句所看到的:
在Swift中常量和變量能夠是不論什麽類型。let cat = ""; println(cat)
當聲明一個常量或一個變量時。你能夠為其提供一個類型標識,來清楚表示該常量或變量的類型。 聲明語法是在常量和變量名字後面跟著一個冒號,接著跟著類型的名字。例如以下所看到的聲明了一個類型為字符串類型(String)名字為welcomeMessage的變量。
var welcomeMessage: String
在作了以上聲明後。welcomeMessage變量就能夠設置為不論什麽字符串值。如:
welcomeMessage = “Hello"
實際上你非常少須要為一個變量聲明或常量聲明指定類型。如上面的對maximumNumberOfLoginAttempts常量和currentLoginAttempt變量的聲明,Swift編譯器可以依據聲明中提供的初始值自己主動判斷其為Int類型。
例如以下語句Swift判斷你想創建一個Double類型的常量。
let pi =3.14159
二、多樣化的數字表示。因次當你定義一個常量或變量時為其提供了一個初始值,就不再須要另外為其指定類型,Swift編譯器能夠從中判斷出其類型。
Swift支持以8位、16位、32, 和64 位形式來表達一個有符號和無符號形式的整數類型。
整數類型的命名遵從和C語言相似的約定,如UInt8代表一個8位無符號整數,Int32代表一個32位有符號整數,Swift建議你通常使用Swift定義的一個位數和和當前平臺的本地字大小同樣的Int整數類型,這樣能夠保持代碼的一致性和互操作性,避免了不同整數類型之間的相互轉換。
Swift中整型常量數字的表達能夠使用十進制、二進制、八進制、十六進制等多種形式:
let decimalInteger = 17 //十進制表達(沒有前綴)
let binaryInteger = 0b10001 // 二進制表達(0b開頭)
let octalInteger = 0o21 // 八進制表達(0o開頭)
let hexadecimalInteger = 0x11 // 十六進制表達(0x開頭)
Swift也提供Double(64位)和Float(32位)兩種形式的浮點數支持。
Swift中。浮點數常量數字的表達支持十進制(沒有前綴)或十六進制(0x開頭)兩種形式,並支持不同的指數形式。例如以下所看到的:
1.25e2 means 1.25 × 102, or125.0. 十進制表達形式(不帶前綴,指數用大寫和小寫的e來指示)
0xFp2 means 15 × 22, or60.0. 十六進制表達形式(以0x開頭,指數用大寫和小寫的p來指示)
Swift中,為了使數字表達更加易讀和自然,數字表達格式還能包括額外的信息,如整數和浮點數都能在前面加入額外的0以及在數字之間包括下劃線。
例如以下所看到的:
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
三、 多元組
多元組(Tuples)是Swift語言提供的一種新的數據類型,是一種多個數值的組合。一個多元組能夠是隨意類型甚至是不同類型數值的組合。
例如以下所看到的:
let http404Error = (404,"Not Found")
該樣例定義了一個描寫敘述HTTP狀態碼的多元組常量http404Error。該常量的類型為(Int, String)的多元組類型,其值為(404, "Not Found")。該多元組表示了一個整數和一個字符串的組合。
當使用時,你能夠從多元組中分解出每一個分離的值。例如以下語句所看到的:
let (statusCode,statusMessage) =http404Error
println("The status code is\(statusCode)")
// prints "The status code is 404"
println("The status message is\(statusMessage)")
// prints "The status message is Not Found"
當你僅須要多元組的部分值時。能夠使用符合‘_’來指示忽略的其他項:
let (justTheStatusCode,_) =http404Error
println("The status code is\(justTheStatusCode)")
// prints "The status code is 404"
另外還能夠使用索引來存取一個多元組中的每一個獨立的項:
println("The status code is\(http404Error.0)")
// prints "The status code is 404"
println("The status message is\(http404Error.1)")
// prints "The status message is Not Found"
當多元組定義時你還能夠為多元組中的每個獨立項命名:
let http200Status = (statusCode:200,description:“OK")
然後你能夠使用命名的元素名來存取這些元素的值:
println("The status code is\(http200Status.statusCode)")
// prints "The status code is 200"
println("The status message is\(http200Status.description)")
// prints "The status message is OK”
四 、選項類型:
多元組主要用於函數的返回值。假設一個函數須要返回多個值。如一個函數須要返回上面描寫敘述的HTTP狀態碼,就能夠定義和返回一個上面描寫敘述的的多元組。
多元組類型提供了一種簡潔的方式使一個函數能夠返回多個不同類型的返回值。
多元組適合於創建相關值的暫時組合。而不適合於創建復雜的數據結構。
與選項類型能力最接近的是Objective-C語言中的一個可能返回一個對象,也可能返回一個nil的方法的使用。
選項類型是Swift語言提供的又一種強大的新的數據類型,用來表達一個可能存在也可能不存在的值類型。
在Objective-C語言中nil意味著一個有效對象的不存在,但在Objective-C語言中nil僅可以工作於對象,而不能工作於結構以及其他基本C類型或者枚舉類型。
對於這些類型值的不存在Objective-C語言用一個NSNotFound特殊值表示。
而Swift的選項類型能夠指示不論什麽類型值的不存在,而不須要另外定義不論什麽其他特殊值。
如一個字符串類型可以使用其方法toInt來轉換一個字符串的值為一個整數。但是,不是每個字符串都可以轉換為一個整數。
如含有數字的字符串如"123" 能夠進行轉換。而不含數字的字符串如"hello, world" 則不能轉換。
這樣的情況假設使用選項類型就很實用。
如樣例:
let possibleNumber ="123"
let convertedNumber =possibleNumber.toInt()
因為toInt方法可能失敗。因此編譯器判斷possibleNumber.toInt()返回的是一個optional Int類型。
一個 optional Int 類型在語法上寫作:Int?
。選項類型的變量或常量指示該常量或變量同意沒有值。
‘?’標識符指示該值是一個選項類型,意味著該類型值能夠包括有效的整數值,也可能什麽值也沒有包括。
Swift中你可以使用if語句來推斷一個選項是否包括一個值。假設一個選項包括一個值,它被評估為true。否則評估為false。
假設使用if語句評估一個選項包括了一個值,然後就行在選項名字後面加入一個!來獲取該選項的值。
這在Swift語言中稱作選項值的強制展開。
例如以下樣例展示了怎樣強制展開一個選項值:
ifconvertedNumber{
println("\(possibleNumber) has an integer value of \(convertedNumber!)")
}else {
println("\(possibleNumber) could not be converted to an integer")
}
須要強調的是,假設試圖使用!來存取一個不存在的選項值會觸發一個執行時錯誤,因此在使用!來存取選項值之前應該總是確保該選項值包括一個有效值。或者採用上面的方式進行推斷。
Swift中你還可以使用選項綁定來推斷一個選項是否包括一個有效值。選項綁定作為if 或while語句的推斷語句使用,在推斷語句中先取出選項中的值並賦值給一個常量或變量。然後使用該常量或變量來檢查和使用該選項中的值。
例如以下樣例展示了怎樣使用選項綁定來使用一個選項中的值。
ifletactualNumber = possibleNumber.toInt() {
println("\(possibleNumber) has an integer value of \(actualNumber)")
}else {
println("\(possibleNumber) could not be converted to an integer")
}
你能夠通過為一個選項變量賦值為nil,來設置該選項變量為一個無值的狀態:
var serverResponseCode: Int? = 404
選項變量serverResponseCode 包括一個實際的整數值404.
serverResponseCode = nil
如今serverResponseCode不包括值。
假設你定義一個選項常量或變量,但沒有為其提供默認值,該常量或變量自己主動被設置為nil。
nil在Objective-C是一個代表不存在對象的指針,而在Swift中它代表一個確定類型值的不存在,而且在Swift中隨意類型 的選項都能夠設置為nil,而不不過對象類型。
一個選項類型在首次設置時。假設為其設置了一個有效值。因為這時選項類型的值程序是清楚的,而且假設在此後使用該選項的每一個地方也可以確信該選項的值存在,這樣的類型的選項就行定義為一個稱為隱含的已展開的選項。
一個隱含的已展開的選項在使用時不再須要使用條件語句來檢查以及使用強制展開或選項綁定來取出選項中的值。
你在選項類型的常量或變量後面放置一個‘!’符號標識來指示該選項是一個隱含的已展開的選項。
隱含的已展開的選項通常在類的初始化期間使用。
例如以下展示了怎樣定義一個隱含的已展開的選項及怎樣使用它:
letassumedString:String! ="An implicitly unwrapped optional string."
println(assumedString)
// no exclamation mark is needed to access its value
當然須要註意的是假設試圖存取一個不包括值的隱含的已展開的選項,仍然會觸發一個執行時錯誤。
版權全部。請轉載時註明鏈接和出處,謝謝!
蘋果新的編程語言 Swift 語言進階(二)--基本數據類型