//可選項(xiàng)1-14
//1.可選項(xiàng),也叫可選類(lèi)型,它允許將值設(shè)置為nil胶坠,在類(lèi)型名稱后面加個(gè)問(wèn)號(hào)搓茬?來(lái)定義一個(gè)可選項(xiàng)
var name : String? = "Jack"
name = nil
var age : Int? //默認(rèn)就是nil
age = 10
age = nil
var array = [1, 15, 40, 29]
func get(_ index: Int) -> Int? {
if index < 0 || index >= array.count {
return nil
}
return array[index]
}
print(get(1))//Optional(15)
print(get(-1))//nil
//2.強(qiáng)制解包,可選項(xiàng)是堆其他類(lèi)型的一層包裝寇蚊,可以將它理解為一個(gè)盒子,如果為nil,那么它是個(gè)空盒子,如果不是nil,那么盒子里裝的是:被包裝類(lèi)型的數(shù)據(jù),如果要從可選項(xiàng)中取出被包裝的數(shù)據(jù)(將盒子里裝的東西取出來(lái)),需要使用感嘆號(hào)!進(jìn)行強(qiáng)制解包
var age0: Int? = 10
var ageInt : Int = age0!
ageInt += 10
//如果對(duì)值為nil的可選類(lèi)型空盒子進(jìn)行強(qiáng)制解包第晰,將會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤
var age1 : Int?
//age1!
//3.判斷可選項(xiàng)是否包含值
let number = Int("123")
if number != nil {
print("字符串轉(zhuǎn)換整數(shù)成功:\(number!)")//字符串轉(zhuǎn)換整數(shù)成功:123
} else {
print("字符串轉(zhuǎn)換整數(shù)失敗")
}
//4.可選項(xiàng)綁定谓苟,用來(lái)判斷可選項(xiàng)是否包含值,如果包含就自動(dòng)解包涕癣,把值賦值給一個(gè)臨時(shí)的常量let或者變量var,并返回true哗蜈,否則返回false
if let number0 = Int("123") {
print("字符串轉(zhuǎn)換整數(shù)成功:\(number0)")//字符串轉(zhuǎn)換整數(shù)成功:123
//number0是強(qiáng)制解包之后的Int值前标,作用域僅限于這個(gè)大括號(hào)
} else {
print("字符串轉(zhuǎn)換整數(shù)失敗")
}
enum Season : Int {
case spring = 1, summer, autumn, winter
}
if let season = Season(rawValue: 6) {
switch season {
case .spring:
print("the season is spring")
default:
print("the season is other")
}
} else {
print("no such season")//
}
//5.等價(jià)寫(xiě)法 值綁定和時(shí)用,
if let first = Int("4") {
if let second = Int("42") {
if first < second && second < 100 {
print("\(first) < \(second) < 100")
}
}
}
if let first0 = Int("4"),
let second0 = Int("42"),
first0 < second0 && second0 < 100 {
print("\(first0) < \(second0) < 100")
}
//6.while循環(huán)中使用可選綁定
//遍歷數(shù)組,將遇到的整數(shù)都加起來(lái),如果遇到負(fù)數(shù)或非數(shù)字停止遍歷
var strs = ["10", "20", "abc", "-20", "30"]
var index0 = 0
var sum = 0
while let num = Int(strs[index0]), num > 0 {
sum += num
index0 += 1
}
print(sum)
/*7.空合運(yùn)算符??
a??b
a是可選項(xiàng)距潘,b是可選項(xiàng)或者不是可選項(xiàng)
b跟a的存儲(chǔ)類(lèi)型必須相同
如果a不為nil炼列,就返回a,如果a為nil,就返回b
如果b不是可選項(xiàng)音比,返回a時(shí)會(huì)自動(dòng)解包
??的運(yùn)算類(lèi)型由b決定
*/
let a0: Int? = 1
let b0: Int? = 2
let c0 = a0 ?? b0 //c0是Int?,Optional(1)
let a1: Int? = nil
let b1: Int? = 2
let c1 = a1 ?? b1 //c1是Int?,Optional(2)
let a2: Int? = nil
let b2: Int? = nil
let c2 = a2 ?? b2 //c2是Int?,nil
let a3: Int? = 1
let b3: Int = 2
let c3 = a3 ?? b3 //c3是Int,1
let a4: Int? = nil
let b4: Int = 2
let c4 = a4 ?? b4 //c4是Int,2
let a5: Int? = nil
let b5: Int = 2
//如果不使用??運(yùn)算符
let c5: Int
if let tmp = a5 {
c5 = tmp
} else {
c5 = b5
}
//8.多個(gè)俭尖??一起使用
let a6: Int? = 1
let b6: Int? = 2
let c6 = a6 ?? b6 ?? 3 //c6是Int洞翩,1
let a7: Int? = nil
let b7: Int? = 2
let c7 = a7 ?? b7 ?? 3 //c7是Int,2
let a8: Int? = nil
let b8: Int? = nil
let c8 = a8 ?? b8 ?? 3 //c8是Int,3
//9.??跟if let 配合使用
let a9: Int? = nil
let b9: Int? = 2
if let c9 = a9 ?? b9 {//類(lèi)似于if a != nil || b != nil
print(c9)
}
if let c10 = a9, let d10 = b9 {//類(lèi)似于 if a != nil && b != nil
print(c10)
print(d10)
}
//10. if語(yǔ)句實(shí)現(xiàn)登錄
func login(_ info: [String : String]) {
let userName: String
if let tmp = info["userName"] {
userName = tmp
} else {
print("請(qǐng)輸入用戶名")
return
}
let password: String
if let tmp = info["password"] {
password = tmp
} else {
print("請(qǐng)輸入密碼")
return
}
print("用戶名:\(userName)","密碼:\(password)","登錄ing")
}
login(["userName" : "Jack", "password" : "123456"])
login(["password" : "123456"])
login(["userName" : "Jack"])
/*
11.guard語(yǔ)句 解決上邊作用域麻煩的問(wèn)題
guard 條件 else {
//do something
退出當(dāng)前作用域
//return稽犁、break、continue骚亿、throw error
}
1當(dāng)guard語(yǔ)句的條件為false時(shí),就會(huì)執(zhí)行大括號(hào)里面的代碼,當(dāng)guard語(yǔ)句的條件為true時(shí)已亥,就會(huì)跳過(guò)guard語(yǔ)句
2guard語(yǔ)句特別適合用“提前退出”
3當(dāng)使用guard語(yǔ)句進(jìn)行可選綁定的時(shí),綁定的變量var、常量let也能在外層作用域中使用
*/
func login0(_ info: [String : String]) {
guard let userName0 = info["userName"] else {
print("請(qǐng)輸入用戶名")
return
}
guard let password0 = info["password"] else {
print("請(qǐng)輸入密碼")
return
}
print("用戶名:\(userName0)","密碼:\(password0)","登錄ing")
}
/*
12.隱式解包来屠,在類(lèi)型后面加個(gè)感嘆號(hào)虑椎!定義一個(gè)隱式解包可選項(xiàng)。盡量少用!,用俱笛?即可安全些捆姜,知道就行
在某些情況下,可選項(xiàng)一旦被設(shè)定值之后就會(huì)一直擁有值,在這種情況下可以去掉檢查迎膜,也不必每次訪問(wèn)的時(shí)候都解包娇未,因?yàn)樗艽_定每次訪問(wèn)的時(shí)候都有值。
*/
let num1: Int! = 10
let num2: Int = num1
if num1 != nil {
print(num1 + 6)//16
}
if let num3 = num1 {
print(num3)
}
let num4: Int? = nil
//let num5: Int = num4
//13.字符串插值
//可選項(xiàng)在字符串插值或者直接打印時(shí)星虹,編譯器會(huì)發(fā)出警告
var age2: Int? = 10
print("My age is \(age2)") //My age is Optional(10)
//如有警告3中方法解決
print("My age is \(age2!)") // 10
print("My age is \(String(describing: age2))")//Optional(10)
print("My age is \(age2 ?? 0)") //10
//14.多重可選項(xiàng) 容易設(shè)置面試題
var num6: Int? = 10
var num7: Int?? = num6
var num8: Int?? = 10
print(num7 == num8) //true
var num9: Int? = nil
var num10: Int?? = num9
var num11: Int?? = nil
print(num10 == num11) //false //易錯(cuò)點(diǎn)
(num10 ?? 1) ?? 2 //2 //易錯(cuò)點(diǎn) //num9??2 //2
(num11 ?? 1) ?? 2 //1
06-可選項(xiàng)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)段直,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人溶诞,你說(shuō)我怎么就攤上這事鸯檬。” “怎么了螺垢?”我有些...
- 文/不壞的土叔 我叫張陵喧务,是天一觀的道長(zhǎng)赖歌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)功茴,這世上最難降的妖魔是什么庐冯? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮坎穿,結(jié)果婚禮上展父,老公的妹妹穿的比我還像新娘。我一直安慰自己玲昧,他們只是感情好栖茉,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著酌呆,像睡著了一般衡载。 火紅的嫁衣襯著肌膚如雪搔耕。 梳的紋絲不亂的頭發(fā)上隙袁,一...
- 那天,我揣著相機(jī)與錄音弃榨,去河邊找鬼菩收。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鲸睛,可吹牛的內(nèi)容都是我干的娜饵。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼官辈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼箱舞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拳亿,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晴股,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后肺魁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體电湘,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年鹅经,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寂呛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布涌哲,位于F島的核電站,受9級(jí)特大地震影響尚镰,放射性物質(zhì)發(fā)生泄漏阀圾。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一狗唉、第九天 我趴在偏房一處隱蔽的房頂上張望初烘。 院中可真熱鬧,春花似錦分俯、人聲如沸肾筐。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吗铐。三九已至,卻和暖如春杏节,著一層夾襖步出監(jiān)牢的瞬間唬渗,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓嫉鲸,卻偏偏與公主長(zhǎng)得像撑蒜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玄渗,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 可選項(xiàng) 使用“座菠?”后,值可以為nil 強(qiáng)制解包 確定有值直接使用“藤树!” 可選項(xiàng)綁定 有值就直接解包并賦值給一個(gè)變量...
- 63歲的麻省理工學(xué)院媒體實(shí)驗(yàn)室教授米切爾·瑞斯尼克(Mitch Resnick)在談及自己開(kāi)發(fā)Scratch編程語(yǔ)...
- 夜不歸宿也罷也榄,反正自己那晚不也是夜不歸宿了嗎巡莹?既然沒(méi)有愛(ài)了,就不必去在意那些了甜紫。其實(shí)他應(yīng)該是有自己好的情人降宅,要不然...
- 疫情過(guò)后腰根,快憋壞的你,最想干什么拓型?報(bào)復(fù)性吃遍全城最牛的館子额嘿?報(bào)復(fù)性瘋狂購(gòu)物瘸恼?報(bào)復(fù)性到處去浪? 其實(shí)册养,大家點(diǎn)贊最多的...
- 凌晨一點(diǎn)四十七,寶寶醒了坎炼,已經(jīng)有些時(shí)間沒(méi)有在這個(gè)點(diǎn)醒來(lái)了愧膀,當(dāng)下有些煩躁。 喂奶喂得非常不容易谣光,寶寶又不愿意睡覺(jué)檩淋。看...