Swift學(xué)習(xí)-元組&可選類型

元組

1.介紹

元組是Swift中特有的,OC中并沒(méi)有相關(guān)類型

它是一種數(shù)據(jù)結(jié)構(gòu)划纽,在數(shù)學(xué)中應(yīng)用廣泛

類似于數(shù)組或者字典

可以用于定義一組數(shù)據(jù)

組成元組類型的數(shù)據(jù)可以稱為“元素”

2.使用

2.1 定義

假設(shè)定義一組數(shù)據(jù) 包括 姓名 年齡 身高 下面分別使用數(shù)組藐吮、字典和元組來(lái)定義

1.使用數(shù)組

let array :[Any] = ["lwy",18,1.88]

1.1>取數(shù)據(jù)

let name1 =array[0] //取名字

let age1 =array[1] ?//取age

let height1 =array[2] ?//取身高

2.使用字典定義數(shù)據(jù)

let dict :[String:Any] = ["name":"lwy","age":18,"height":1.88]

2.1>取出相應(yīng)的數(shù)據(jù)

dict["name"]? //2.1>取名字

dict["age"]? //2.2>取年齡

dict["height"]? //2.3>取身高

//3.使用元組 ?不同于數(shù)組和字典是使用中括號(hào)[],元組是使用() 元組一般是用于方法的返回值

let info = ("lwy",18,1.88)

取數(shù)據(jù) ( 元組可以通過(guò)下標(biāo)來(lái)直接取數(shù)據(jù) ?跟數(shù)組不同的是 ?數(shù)組取下標(biāo)的是array[0] ?元組的話是info.0)

let myName =info.0

let myAge =info.1

let myHeight =info.2

但是通過(guò)這樣的方式取值的話不容易明白取出的是什么數(shù)據(jù),

2.2 別名

雖然我們可以通過(guò) 元組名 + . + 下標(biāo)值的方式取出相應(yīng)的值硝逢,但是我們很難明白我們到底取出的是什么數(shù)據(jù)的妖,這個(gè)時(shí)候我們可以給元組中的每一個(gè)元素起個(gè)別名

跟字典很相似 不過(guò)跟字典不同的是字典的話是中括號(hào)[], 元組的話是小括號(hào)(), 而且元組的別名不用雙引號(hào),直接寫字符璧眠;字典的話我們一般都是用字符來(lái)作為key的缩焦, 不過(guò)在swift中其它數(shù)據(jù)類型也可以作為key读虏,比如Int類型

?let userInfo = (userName:"lwy",userAge:18,userHeight:1.88)

這樣的話我們可以直接通過(guò)每個(gè)元素的別名去處相應(yīng)的數(shù)據(jù)

userInfo.userName

userInfo.userAge

userInfo.userHeight

起了別名之后我們還是可以通過(guò)下標(biāo)來(lái)取值

userInfo.2 //取出的數(shù)據(jù)跟userInfo.userHeight是一樣的

我們也可以直接把每個(gè)元素的別名來(lái)作為元組的名稱

let ?(name2, age2, height2) = ("lwy",18,1.88)

在取數(shù)據(jù)的直接使用別名

print(name2)

print(age2)

print(height2)


可選類型

1.概念

在OC開(kāi)發(fā)中,如果一個(gè)變量暫時(shí)不使用,可以賦值為0(基本屬性類型)或者賦值為空(對(duì)象類型)

在swift開(kāi)發(fā)中,nil也是一個(gè)特殊的類型.因?yàn)楹驼鎸?shí)的類型不匹配是不能賦值的(swift是強(qiáng)類型語(yǔ)言)

但是開(kāi)發(fā)中賦值nil,在所難免.因此推出了可選類型

可選類型的取值:

空值

有值

比如

let name : String = nil 這樣寫是錯(cuò)誤的,雖然在OC中是正確的舌界,因?yàn)樵赟wift中nil也是一個(gè)特殊類型掘譬,它并不是字符類型,類型是不一致的呻拌,所以不能賦值葱轩,因?yàn)樵趕wift中不同類型是不能賦值的(swift是強(qiáng)類型語(yǔ)言)

2.定義

2.1 常規(guī)方法(不常用)

//可選類型的創(chuàng)建

var name :Optional<String> = nil //可以類比數(shù)組的創(chuàng)建

//數(shù)組的創(chuàng)建

var names : Array<String> = ["123"]

因?yàn)閯?chuàng)建的是數(shù)組,所以數(shù)據(jù)類型是Array藐握,數(shù)組里面存放的是String類型靴拱,所以是Array<String> ,?同理可選類型的創(chuàng)建,因?yàn)槭强蛇x類型,所以是Optional,可選類型存放的是字符串,所以是Optional<String>; ?我們可以往這個(gè)可選類型里面存放字符串, 就像能夠像數(shù)組中存放字符串一樣, ?區(qū)別就是數(shù)組里面可以存放多個(gè)字符串, ?可選類型只能存放一個(gè)字符串, ?如果再次往可選類型里面存放數(shù)據(jù), ?就會(huì)把之前的數(shù)據(jù)給覆蓋掉

2.2 第二種定義方法 (語(yǔ)法糖) ?let/var 名字 :類型? = 值 的形式

var name :String? =nil // 這種更常用一些

可選類型的使用

1. 給可選類型賦值

name = 18 // 這樣是錯(cuò)誤的, ?因?yàn)槲覀兌x的是只能存放字符串類型的可選類型

name="lwy" ?//正確寫法

2. 取出可選類型中的值

在取可選類型中的值的時(shí)候我們需要對(duì)可選類型進(jìn)行解包 解包方式: 可選類型!?

需要注意的一點(diǎn)是猾普, 在強(qiáng)制解包前需要判斷可選類型是否為nil袜炕,如果為nil,我們也進(jìn)行了強(qiáng)制解包初家,那么系統(tǒng)會(huì)崩潰

//在強(qiáng)制解包前先對(duì)可選類型進(jìn)行判斷是否為nil

if name!=nil {

print(name!)//每次打印都要解包

print(name!)

print(name!)

}

3.可選綁定

從上面可以看到偎窘, 我們?cè)谑褂每蛇x類型的值的時(shí)候, 每次都要強(qiáng)制解包溜在, 是比較麻煩的陌知, 我們可以這樣來(lái)使用

3.1>寫法一(不常用)

if let tempName = name {

print(tempName)//這樣的話就直接使用tempName ?不需要解包

print(tempName)

print(tempName)

}

其實(shí)上面的是進(jìn)行了兩步操作

1.先判斷name是否有值,如果沒(méi)有值則不執(zhí)行{}

?2.如果有值掖肋,系統(tǒng)會(huì)對(duì)可選類型name進(jìn)行解包仆葡,不需要我們自己解包,并把解包后的值賦值給前面的常量

3.2>寫法二(常用)

if let name = name{//定義的常量名可以和可選類型的名字一樣

print(name)//這里我們輸出的是常量name志笼,而不是可選類型name沿盅,因?yàn)閟wift和OC一樣,都有一個(gè)就近原則

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纫溃,一起剝皮案震驚了整個(gè)濱河市腰涧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌紊浩,老刑警劉巖南窗,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異郎楼,居然都是意外死亡万伤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門呜袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敌买,“玉大人,你說(shuō)我怎么就攤上這事阶界『缗ィ” “怎么了聋庵?”我有些...
    開(kāi)封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)芙粱。 經(jīng)常有香客問(wèn)我祭玉,道長(zhǎng),這世上最難降的妖魔是什么春畔? 我笑而不...
    開(kāi)封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任脱货,我火速辦了婚禮,結(jié)果婚禮上律姨,老公的妹妹穿的比我還像新娘振峻。我一直安慰自己,他們只是感情好择份,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布扣孟。 她就那樣靜靜地躺著,像睡著了一般荣赶。 火紅的嫁衣襯著肌膚如雪凤价。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天拔创,我揣著相機(jī)與錄音料仗,去河邊找鬼。 笑死伏蚊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的格粪。 我是一名探鬼主播躏吊,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帐萎!你這毒婦竟也來(lái)了比伏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疆导,失蹤者是張志新(化名)和其女友劉穎赁项,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體澈段,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悠菜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了败富。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悔醋。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兽叮,靈堂內(nèi)的尸體忽然破棺而出芬骄,到底是詐尸還是另有隱情猾愿,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布账阻,位于F島的核電站蒂秘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淘太。R本人自食惡果不足惜姻僧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琴儿。 院中可真熱鬧段化,春花似錦、人聲如沸造成。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晒屎。三九已至喘蟆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鼓鲁,已是汗流浹背蕴轨。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骇吭,地道東北人橙弱。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像燥狰,于是被迫代替她去往敵國(guó)和親棘脐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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