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

