工欲善其事,必先利其器,對一門語言基礎(chǔ)概念的把握就好像練內(nèi)功,只有練好了,身體上的某些部位達到一定硬度-。-||……才能跟別人過招,哈哈,來吧,那就讓我們硬起來!
數(shù)值型字面量
整數(shù)字面量可以被寫作:
- 一個十進制數(shù),沒有前綴
- 一個二進制數(shù),前綴是0b
- 一個八進制數(shù),前綴是0o
- 一個十六進制數(shù),前綴是0x
下面的所有整數(shù)字面量的十進制值都是17:
let decimalInteger = 17
let binaryInteger = 0b10001 // 二進制的17
let octalInteger = 0o21 // 八進制的17
let hexadecimalInteger = 0x11 // 十六進制的17```
下面的這些浮點字面量都等于十進制的12.1875:
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0```
就是數(shù)值的格式,沒必要深究,還是十進制用的多……用到的時候再去看吧
數(shù)值型類型轉(zhuǎn)換
通常來講,即使代碼中的整數(shù)常量和變量已知非負(fù),也請使用Int類型。總是使用默認(rèn)的整數(shù)類型可以保證你的整數(shù)常量和變量可以直接被復(fù)用并且可以匹配整數(shù)類字面量的類型推斷。
只有在必要的時候才使用其他整數(shù)類型,比如要處理外部的長度明確的數(shù)據(jù)或者為了優(yōu)化性能、內(nèi)存占用等等。使用顯式指定長度的類型可以及時發(fā)現(xiàn)值溢出并且可以暗示正在處理特殊數(shù)據(jù)。
概括一下:為了世界和平,請用Int……
整數(shù)轉(zhuǎn)換
不同整數(shù)類型的變量和常量可以存儲不同范圍的數(shù)字。Int8類型的常量或者變量可以存儲的數(shù)字范圍是-128127,而UInt8類型的常量或者變量能存儲的數(shù)字范圍是0255。如果數(shù)字超出了常量或者變量可存儲的范圍,編譯的時候會報錯:
let cannotBeNegative: UInt8 = -1
// UInt8 類型不能存儲負(fù)數(shù),所以會報錯
let tooBig: Int8 = Int8.max + 1
// Int8 類型不能存儲超過最大值的數(shù),所以會報錯```
*不同類型的數(shù)值也不能直接進行運算,必須顯式的裝換成同一類型,類似OC的強制轉(zhuǎn)換,寫法如下:*
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)```
SomeType(ofInitialValue)是調(diào)用 Swift 構(gòu)造器并傳入一個初始值的默認(rèn)方法。在語言內(nèi)部,UInt16有一個構(gòu)造器,可以接受一個UInt8類型的值,所以這個構(gòu)造器可以用現(xiàn)有的UInt8來創(chuàng)建一個新的UInt16。注意,你并不能傳入任意類型的值,只能傳入UInt16內(nèi)部有對應(yīng)構(gòu)造器的值。不過你可以擴展現(xiàn)有的類型來讓它可以接收其他類型的值(包括自定義類型),請參考擴展。
整數(shù)和浮點數(shù)轉(zhuǎn)換
還是那句話,不支持隱式轉(zhuǎn)換,需要注意的是,當(dāng)用 SomeType(ofInitialValue)這種方式來初始化一個新的整數(shù)值時,浮點值會被截斷。也就是說4.75會變成4,-3.9會變成-3。直接切尾巴……好疼額-。-||
注意:
結(jié)合數(shù)字類常量和變量不同于結(jié)合數(shù)字類字面量。字面量3可以直接和字面量0.14159相加,因為數(shù)字字面量本身沒有明確的類型。它們的類型只在編譯器需要求值的時候被推測。
這真是極好的……如果我想算1+0.1等于多少,還得寫成Double(1)+0.1,那我再也就不想寫代碼了
類型別名
類型別名(type aliases)就是給現(xiàn)有類型定義另一個名字。你可以使用typealias關(guān)鍵字來定義類型別名。
為了提升逼格,蘋果果斷把typedef改了個名……我已經(jīng)洞悉了蘋果工程師六維層面展開后的腦洞,啊哈哈哈……
這么寫:
typealias AudioSample = UInt16```
#####布爾值
Swift 有一個基本的布爾(Boolean)類型,叫做Bool。布爾值指邏輯上的值,因為它們只能是真或者假。Swift 有兩個布爾常量,true和false:
let orangesAreOrange = true
let turnipsAreDelicious = false```
需要注意的是:
如果你在需要使用Bool類型的地方使用了非布爾值,Swift 的類型安全機制會報錯
什么是非布爾值呢,比如我們之前喜歡用數(shù)字是否為零來作為判斷條件,這些數(shù)字都是非布爾值
比如這樣做是不對滴:
let i = 1
if i {
// 這個例子不會通過編譯,會報錯
}```