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

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
