Swift - 變量压汪、常量粪牲、可選項(xiàng)、字面量

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)有值

下一篇:“Swift運(yùn)算符” http://www.reibang.com/p/6d7e6b88034d

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牛郑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子敬鬓,更是在濱河造成了極大的恐慌淹朋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉答,死亡現(xiàn)場(chǎng)離奇詭異础芍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)数尿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)仑性,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人砌创,你說(shuō)我怎么就攤上這事虏缸■昀粒” “怎么了嫩实?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)窥岩。 經(jīng)常有香客問(wèn)我甲献,道長(zhǎng),這世上最難降的妖魔是什么颂翼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任晃洒,我火速辦了婚禮,結(jié)果婚禮上朦乏,老公的妹妹穿的比我還像新娘球及。我一直安慰自己,他們只是感情好呻疹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布吃引。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镊尺。 梳的紋絲不亂的頭發(fā)上朦佩,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音庐氮,去河邊找鬼语稠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛弄砍,可吹牛的內(nèi)容都是我干的仙畦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼输枯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼议泵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起桃熄,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤先口,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瞳收,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碉京,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年螟深,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谐宙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡界弧,死狀恐怖凡蜻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垢箕,我是刑警寧澤划栓,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站条获,受9級(jí)特大地震影響忠荞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帅掘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一委煤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧修档,春花似錦碧绞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寓免。三九已至,卻和暖如春计维,著一層夾襖步出監(jiān)牢的瞬間袜香,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工鲫惶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜈首,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓欠母,卻偏偏與公主長(zhǎng)得像欢策,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赏淌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開(kāi)發(fā)的 API 和技術(shù)的踩寇。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無(wú)灃閱讀 4,299評(píng)論 1 27
  • Swift 是一門(mén)開(kāi)發(fā) iOS, macOS, watchOS 和 tvOS 應(yīng)用的新語(yǔ)言。然而六水,如果你有 C 或...
    XLsn0w閱讀 922評(píng)論 2 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,801評(píng)論 1 10
  • 本文是由iwill公司CEO——馬姐親自寫(xiě)成掷贾,如果你正在尋找機(jī)會(huì)睛榄,也正好打開(kāi)了此文,請(qǐng)認(rèn)真讀下去想帅,或許對(duì)你的人生有...
    Doraemon丿果果閱讀 904評(píng)論 0 0
  • 一直在找尋的场靴,是那些真正屬于自己的東西。而這個(gè)東西港准,隨著年齡的增長(zhǎng)旨剥,會(huì)越來(lái)越多。成長(zhǎng)的煩惱也因此所得浅缸。在找尋的過(guò)程...
    丟了朵朵閱讀 301評(píng)論 0 1