Swift 可選類型

前言

盡量不使用

可選類型(也有叫‘可選項(xiàng)’的),算是Swift的一個(gè)特色,可以讓程序在編寫階段就發(fā)現(xiàn)大部分因?yàn)樽兞繛榭斩鴮?dǎo)致的問題,提高安全性;(dart的空安全就于此類似,對(duì)flutter還不太熟,如果說錯(cuò),請(qǐng)刪除)

何時(shí)使用

之前說了 變量聲明階段必須有值,但是實(shí)際開發(fā)中總有特例,總有在聲明或初始化階段無法確定值的情況,這時(shí)就需要可選類型;

如何聲明

在變量聲明的基礎(chǔ)上添加?問號(hào):

var 變量名: 類型名? = 值

eg: var name: String?

這里注意要用var修飾 用let修飾沒有意義,'類型名'不可省略,’值‘可以省略;

var name: String?
name = "baidu"
print(name!) // baidu  如果name = nil 會(huì)crash
print(name ?? "s")// baidu  如果name = nil 則輸出s
print(name as Any)// Optional("baidu") 顯然這不是我們想要的  如果name = nil 則輸出 nil


if let str = name { // name如果有值,會(huì)自動(dòng)解包并賦值給str
    print(str) // baidu
}else{
    print("name is nil")
}




var age: Int! = 10 //如果聲明時(shí)用嘆號(hào),將來使用時(shí)會(huì)隱式解包  非常不建議使用!?。。。?age = 18
let age2: Int = age // 隱式解包只會(huì)發(fā)生在賦值時(shí)?
print(age as Any, age2) // Optional(18) 18  如果age = nil 會(huì)crash

怎樣理解

可選類型可以理解為一個(gè)特殊類型,只有兩種情況: 有值(Optional)、無值(nil) 。

然而我們想要使用可選類型中的值,則需要解包。

解包:正好今天換工位,領(lǐng)了一個(gè)紙箱,可以把可選類型比作一個(gè)紙箱,紙箱中要么是空的,要么有東西。而從有東西的紙箱中取出這個(gè)東西的過程成為解包;解包后紙箱就被丟棄,值便裸露出來;

使用中提到了解包,常用的有三種形式:1. 用嘆號(hào)!是強(qiáng)制解包,不是在非常確定有值的情況下不要使用;2. 用雙問號(hào)?? 問號(hào)左邊的變量自動(dòng)解包如果有值則返回,如果未nil則返回問號(hào)右側(cè)的值;3. 用 if let str = name {} ;

可選鏈

提到可選類型,就得說說可選鏈:由可選類型的屬性構(gòu)成的調(diào)用鏈條。eg: preson.pet?.name = "Jerry"

  class Dog {
        var name: String? = "Tom"
    }
    class Preson {
        ///寵物
        var pet: Dog? = nil
    }    


    let preson = Preson()
    preson.pet?.name = "Jerry"
    print(preson.pet?.name as Any) // 輸出 nil  這里pet右邊的問號(hào)必須要加,如果pet=nil則不會(huì)調(diào)用后邊的name,而直接返回nil。反之如果?變!則會(huì)crash
    


    preson.pet = Dog()
    preson.pet?.name = "Jerry"
    print(preson.pet?.name ?? "無") // 輸出 Jerry
    print(preson.pet!.name!) // 輸出 Jerry 不建議這樣寫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在值可能不存在的情況下,您可以使用可選值。 可選表示兩種可能性:有一個(gè)值,您可以解開可選值以訪問該值,或者根本沒有...
    Joker_King閱讀 431評(píng)論 0 0
  • 原文地址 在Swift中,使用可選類型(optionals)來表示值可能缺失的情況。可選屬性存在兩種可能性,一種是...
    iOS學(xué)習(xí)社區(qū)閱讀 394評(píng)論 0 1
  • 在實(shí)際開發(fā)過程中,經(jīng)常會(huì)遇到一個(gè)數(shù)據(jù)可能有值,也可能沒有值的情況。針對(duì)這種情況,Swift增加了可選類型(Opti...
    汪小喵閱讀 612評(píng)論 0 1
  • 可選類型 在Swift中,可選類型其根源是一個(gè)枚舉型,里面有None和Some兩種類型.其實(shí)所謂的nil就...
    Amok校長(zhǎng)閱讀 345評(píng)論 0 0
  • Swift中加入了可選類型Optional,用來處理值可能缺失的情況??蛇x類型表示兩種可能: 或者有值, 你可以解...
    _小沫閱讀 425評(píng)論 0 0

友情鏈接更多精彩內(nèi)容