Swift變量
變量是一種使用方便的占位符止剖,用于引用計(jì)算機(jī)內(nèi)存地址虑瀑。
Swift每個(gè)變量都指定了特定的類(lèi)型,該類(lèi)型決定了變量占用內(nèi)存的大小滴须,不同的數(shù)據(jù)類(lèi)型也可以決定可以存儲(chǔ)值的范圍。
上一篇文章:“Swift 基本語(yǔ)法和數(shù)據(jù)類(lèi)型”已經(jīng)為大家介紹了基本的數(shù)據(jù)類(lèi)型叽奥,包括:整形Int扔水、浮點(diǎn)數(shù)Double和Float、布爾類(lèi)型Bool以及字符串類(lèi)型String等朝氓。此外Swift還提供了其他更強(qiáng)大數(shù)據(jù)類(lèi)型魔市,Optional、Array赵哲、Dictionary待德、Struct和Class等。
聲明變量
聲明變量意思是告訴編譯器在內(nèi)存中的那個(gè)位置上為變量創(chuàng)建多大的存儲(chǔ)空間枫夺。在使用變量前将宪,你需要使用var關(guān)鍵字聲明。
var name = <initial value>
以下是一個(gè)Swift程序中變量聲明的簡(jiǎn)單實(shí)例
var varA = 42
print(varA)
var varB : Float
varB = 3.14
print(varB)
以上程序的執(zhí)行結(jié)果為: 42橡庞,3.14
變量命名
變量名可以由字母较坛、數(shù)字和下劃線(xiàn)組成。
變量名需要字母或下劃線(xiàn)開(kāi)始扒最。Swift是一個(gè)區(qū)分大小寫(xiě)的語(yǔ)言丑勤,所以字母的大寫(xiě)與小寫(xiě)是不一樣的。變量名也可以使用簡(jiǎn)單的Unicode字符吧趣,如下所示:
var name = "Hello Swift!"
print(name)
var 你好 = “你好啊”
print(你好)
以上程序的執(zhí)行結(jié)果為:Hello Swift法竞,你好啊
變量輸出
變量和常量可以使用print函數(shù)來(lái)輸出。在字符串可以使用括號(hào)與反斜線(xiàn)來(lái)插入變量强挫,如下實(shí)例:
var name = "Apple"
var site = "http://www.apple.com"
print("\(name)的官網(wǎng)網(wǎng)址為:\(site)")
//以上程序的執(zhí)行結(jié)果為:Apple的官網(wǎng)網(wǎng)址為:http://www.apple.com
Swift常量
常量一旦設(shè)定岔霸,在程序運(yùn)行時(shí)就無(wú)法改變其值。常量可以是任何的數(shù)據(jù)類(lèi)型如:整形常量俯渤,浮點(diǎn)型常量秉剑,字符量或字符串常量。同樣也有枚舉類(lèi)型的常量稠诲。常量類(lèi)似于變量侦鹏,區(qū)別在于常量的值一旦設(shè)定就不能改變诡曙,而變量的值可以隨意更改。
常量的聲明
常量使用關(guān)鍵字let類(lèi)聲明略水,語(yǔ)法如下:
let constValue = <initial value>
以下是一個(gè)簡(jiǎn)單的Swift程序中使用的常量的實(shí)例:
let constA = 42
print(constA)
以上程序的執(zhí)行結(jié)果:42
類(lèi)型標(biāo)注
當(dāng)你聲明常量或者變量的時(shí)候可以加上類(lèi)型標(biāo)注价卤,說(shuō)明常量或者變量中要存儲(chǔ)的值的類(lèi)型。如果要添加類(lèi)型標(biāo)注渊涝,需要在常量或者變量名后面加上一個(gè)冒號(hào)和空格慎璧,然后加上類(lèi)型名稱(chēng)。
var constA : <data type> = <optional intial value>
以下是一個(gè)簡(jiǎn)答的實(shí)力演示Swift中常量使用類(lèi)型標(biāo)注跨释,主要注意的是常量定義時(shí)必須初始值胸私。
let constA = 42
print(constA)
let constB : Float = 3.14
print(constB)
以上程序的執(zhí)行結(jié)果為:42, 3.14
常量命名
常量的命名可以由字母鳖谈,數(shù)字和下劃線(xiàn)組成岁疼。常量需要以字母或下劃線(xiàn)開(kāi)始。Swift是一個(gè)區(qū)分大小寫(xiě)的語(yǔ)言缆娃,所以字母大寫(xiě)與小寫(xiě)是不一樣的捷绒。常量名可以使用簡(jiǎn)單的Unicode字符,如下實(shí)例:
let constA = "Hello World"
print(constA)
let 你好 = “你好啊”
print(你好)
以上程序的執(zhí)行結(jié)果為:Hello World贯要,你好啊
常量輸出
變量和常量可以使用print函數(shù)類(lèi)輸出暖侨。在字符串可以使用括號(hào)與反斜線(xiàn)來(lái)插入常量,如下實(shí)例:
let name = "Apple"
let site = "http://www.apple.com"
print("(name)的官網(wǎng)網(wǎng)址為:(site)")
以上程序的執(zhí)行結(jié)果為:“Apple的官方網(wǎng)址為:http://www.apple.com”
Swift可選(Optional)類(lèi)型
Swift的可選(Optional)類(lèi)型崇渗,用于處理值缺失的情況字逗。可選表示“有一個(gè)值”或者“沒(méi)有值”宅广。作為命名類(lèi)型Optional的簡(jiǎn)寫(xiě)扳肛,換而言之,一下兩種聲明是相等的乘碑。
var optionalInteger : Int?
var optionalInteger: Optional<Int>
在這兩種情況下挖息,變量optionalInteger都是可選整數(shù)類(lèi)型。注意:在類(lèi)型和?之間沒(méi)有空格兽肤。
Optional是一個(gè)含有兩種情況的枚舉套腹,None和Some(T),用來(lái)表示可能有或者沒(méi)有值资铡。任何類(lèi)型都可以明確聲明為(或者隱式轉(zhuǎn)換)可選類(lèi)型电禀。當(dāng)聲明一個(gè)可選類(lèi)型的時(shí)候,要確保用括號(hào)給 ? 操作符一個(gè)合適的范圍笤休。例如尖飞,聲明可選整數(shù)數(shù)組,應(yīng)該寫(xiě)成 (Int[])? 寫(xiě)成 Int[]? 會(huì)報(bào)錯(cuò)调塌。
當(dāng)你聲明一個(gè)可選變量或者可選屬性的時(shí)候沒(méi)有提供初始值偶芍,它的值會(huì)默認(rèn)為 nil。
可選項(xiàng)遵照 LogicValue 協(xié)議挠进,因此可以出現(xiàn)在布爾環(huán)境中沮明。在這種情況下辕坝,如果可選類(lèi)型T?包含類(lèi)型為T(mén)的任何值(也就是說(shuō)它的值是 Optional.Some(T) ),這個(gè)可選類(lèi)型等于 true荐健,反之為 false酱畅。
如果一個(gè)可選類(lèi)型的實(shí)例包含一個(gè)值,你可以用后綴操作符 江场!來(lái)訪(fǎng)問(wèn)這個(gè)值纺酸,如下所示:
optionalInteger = 42
optionalInteger! //42
使用操作符!去獲取值為nil的可選變量會(huì)有運(yùn)行時(shí)錯(cuò)誤址否。
你可以用可選鏈接和可選綁定選擇性執(zhí)行可選表達(dá)式上的操作餐蔬。如果值為nil,任何操作都不會(huì)執(zhí)行在张,也不會(huì)有運(yùn)行報(bào)錯(cuò)。
讓我們來(lái)詳細(xì)看下以下實(shí)例來(lái)了解 Swift 中可選類(lèi)型的應(yīng)用:
var myString : String? = nil
if myString != nil {
print(myString)
} else {
print("字符串為nil")
}
以上程序的執(zhí)行結(jié)果為:字符串為nil矮慕。
可選類(lèi)型類(lèi)似于Objective-C中指針的nil值帮匾,但是nil只對(duì)類(lèi)(class)有用,而可選類(lèi)型對(duì)所有的類(lèi)型都可用痴鳄,并且更安全瘟斜。
強(qiáng)制解析
當(dāng)你確定可選類(lèi)型確實(shí)包含值之后,你可以在可選的名字后面加一個(gè)感嘆號(hào)(!)來(lái)獲取值痪寻。這個(gè)感嘆號(hào)表示“我知道這個(gè)歌可選有值螺句,請(qǐng)使用它∠鹄啵”這個(gè)就是可選值的強(qiáng)制解析
var myString : String?
myString = "Hello Swift!"
if myString != nil
{
print(myString)
} else {
print("myString 值為 nil")
}
以上程序的執(zhí)行結(jié)果為:Optional("Hello Swift!")
強(qiáng)制解析可選值蛇尚,使用感嘆號(hào)(!)
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
// 強(qiáng)制解析
print( myString! )
} else {
print("myString 值為 nil")
}
以上程序的執(zhí)行結(jié)果為:"Hello Swift!"
注意:
使用!來(lái)獲取一個(gè)不存在的可選值會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。使用!來(lái)強(qiáng)制解析值之前顾画,一定要確定可選包含一個(gè)非nil的值取劫。
自動(dòng)解析
你可以在聲明可選變量時(shí)使用感嘆號(hào)(!)替換問(wèn)號(hào)(?)。這樣可選變量在使用時(shí)就不需要再加一個(gè)感嘆號(hào)(!)來(lái)獲取值研侣,它會(huì)自動(dòng)解析谱邪。
實(shí)例如下:
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
} else {
print("myString 值為 nil")
}
以上程序執(zhí)行結(jié)果為:Hello, Swift!
可選綁定
使用可選綁定(optional binding)來(lái)判斷可選類(lèi)型是否包含值,如果包含就把值賦給一個(gè)臨時(shí)常量或者變量庶诡〉胍可選綁定可以用在if和while語(yǔ)句中來(lái)對(duì)可選類(lèi)型的值進(jìn)行判斷并把值賦給一個(gè)常量或者變量。
像下面這樣在if語(yǔ)句中寫(xiě)一個(gè)可選綁定:
if let constantName = someOptional {
statements
}
可選項(xiàng)綁定的實(shí)例:
var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
print("你的字符串值為 - \(yourString)")
} else {
print("你的字符串沒(méi)有值")
}
以上程序執(zhí)行結(jié)果為:你的字符串值為 - Hello, Swift!
字面量
所謂的字面量,其實(shí)就是像特定的數(shù)字扯俱,字符串或者是布爾值這樣书蚪,能夠直接了當(dāng)?shù)氐闹赋鲎约旱念?lèi)型并為變量進(jìn)行賦值的值。比如下面示例:
//整型字面量
let aNum = 3
//字符串字面量
let aString = “Hello”
//布爾值字面量
let aBool = true
整形字面量
整型字面量可以使一個(gè)二進(jìn)制蘸吓、八進(jìn)制善炫、十進(jìn)制、十六進(jìn)制的常量库继。二進(jìn)制前綴為0b箩艺,八進(jìn)制前綴為0o,十六進(jìn)制前綴為0x宪萄,十進(jìn)制沒(méi)有前綴:
以下為一些整型字面量的實(shí)例:
//17 - 十進(jìn)制表示
let decimalInteger = 17
//17 - 二進(jìn)制表示
let binaryInteger = 0b10001
//17 - 八進(jìn)制表示
let octalInteger = 0o21
//17 - 十六進(jìn)制表示
let hexadecimalInteger = 0x11
浮點(diǎn)型字面量
浮點(diǎn)型字面量有整數(shù)部分艺谆,小數(shù)點(diǎn),小數(shù)部分及指數(shù)部分拜英。
除非特別指定静汤,浮點(diǎn)型字面量的默認(rèn)推倒類(lèi)型為Swift標(biāo)準(zhǔn)庫(kù)類(lèi)型中的Double,表示64位浮點(diǎn)數(shù)居凶。
浮點(diǎn)型字面量默認(rèn)用十進(jìn)制表示(無(wú)前綴)虫给,也可以用十六進(jìn)制表示(加前綴0x)。
十進(jìn)制浮點(diǎn)型字面量由十進(jìn)制數(shù)字串后跟小數(shù)部分或指數(shù)部分(或兩者皆有)組成侠碧。十進(jìn)制小數(shù)部分由小數(shù)點(diǎn) . 后跟十進(jìn)制數(shù)字串組成抹估。指數(shù)部分由大寫(xiě)或小寫(xiě)字母 e 為前綴后跟十進(jìn)制數(shù)字串組成,這串?dāng)?shù)字表示 e 之前的數(shù)量乘以 10 的幾次方弄兜。例如:1.25e2 表示 1.25 ? 10^2药蜻,也就是 125.0;同樣替饿,1.25e-2 表示 1.25 ? 10^-2语泽,也就是 0.0125。
十六進(jìn)制浮點(diǎn)型字面量由前綴 0x 后跟可選的十六進(jìn)制小數(shù)部分以及十六進(jìn)制指數(shù)部分組成视卢。十六進(jìn)制小數(shù)部分由小數(shù)點(diǎn)后跟十六進(jìn)制數(shù)字串組成踱卵。指數(shù)部分由大寫(xiě)或小寫(xiě)字母 p 為前綴后跟十進(jìn)制數(shù)字串組成,這串?dāng)?shù)字表示 p 之前的數(shù)量乘以 2 的幾次方据过。例如:0xFp2 表示 15 ? 2^2颊埃,也就是 60;同樣蝶俱,0xFp-2 表示 15 ? 2^-2班利,也就是 3.75。
負(fù)的浮點(diǎn)型字面量由一元運(yùn)算符減號(hào) - 和浮點(diǎn)型字面量組成榨呆,例如 -42.5罗标。
浮點(diǎn)型字面量允許使用下劃線(xiàn)" _" 來(lái)增強(qiáng)數(shù)字的可讀性庸队,下劃線(xiàn)會(huì)被系統(tǒng)忽略,因此不會(huì)影響字面量的值闯割。同樣地彻消,也可以在數(shù)字前加 0,并不會(huì)影響字面量的值宙拉。
以下為一些浮點(diǎn)型字面量的實(shí)例:
//十進(jìn)制浮點(diǎn)型字面量
let decimalDouble = 12.1875
//十進(jìn)制浮點(diǎn)型字面量
let exponentDouble = 1.21875e1
//十六進(jìn)制浮點(diǎn)型字面量
let hexadecimalDouble = 0xC.3p0
字符串字面量
字符串型字面量由被包在雙引號(hào)只能怪的一串字符串組成宾尚,形式如下:
“hello”
字符串型字面量中不能包含未轉(zhuǎn)義的雙引號(hào):“”、為轉(zhuǎn)義的:""谢澈、回車(chē)符或換行符煌贴。
以下為字符串字面量的簡(jiǎn)單實(shí)例:
let stringL = "Hello\Apple\n\n蘋(píng)果官網(wǎng):\'http://www.apple.com\'"
print(stringL)
以上程序執(zhí)行結(jié)果為:
Hello Apple
蘋(píng)果官網(wǎng):‘http://www.apple.com’
布爾型字面量
布爾型字面量的默認(rèn)類(lèi)型是Bool。布爾值字面量有三個(gè)值锥忿,它們是Swift的保留關(guān)鍵字:
1.true表示真
2.false表示假
3.nil表示沒(méi)有值