Swift踩坑 可空型別

2021-10-04 07:00:28 字數 2062 閱讀 5573

swift是一門非常安全的語言…

什麼是可空型別
可空型別??(optional)是swift的獨特特性,用來?定某個例項可能沒有值。如果乙個例項沒有值,就稱其為nil

舉例
var n1:

int?

print

(n1)

var n2:

intprint

(n2)

以上**兩者列印的結果不同,n1的列印結果為nil,而n2的列印結果為0。在宣告變數n1時在後面加了乙個?表示其成為可空型別變數。我們希望??知道的是變數何?時為nil,以?相應地執行一些**。在這種情況下,可以使用條件語句來?對變數的值做到這一點。

var n1:

int?

n1 =

1print

(n1)

if n1 !=

nil

特別說明:?強制展開?有一定的危險性。如果可空例項沒有值,程式會在執行時?觸發陷阱??。

可空例項繫結

如果有值,就將其賦給乙個?臨時常量或變數,並且使這個常量或變數在條件語句的第乙個分支**中可用。

語法格式
if

let tmp =

optional

else

舉例
var n1:

int?

iflet n2 = n1

else

以上**列印結果為,因為n1是可空例項且為空,所以不會呼叫if分支的**而是呼叫else分支的**。這樣有乙個好處就是不需要強制展開可空例項,減少陷阱的觸發。

可空鏈式呼叫

可空鏈式呼叫允?許我們把多個查詢?串聯?為乙個可空?例項的值。如果鏈式呼叫中的?每個可?空例項都包含?值,那麼每個呼叫都會成功?,整個查詢??會返回期望型別的可空?例項。如果查詢鏈??中的任意可?空例項是nil,那麼整個?式呼叫會?返回nil

舉例
var n1:

int?

n1 =

200var description:

string?if

let n2 = n1, n2 ==

200print

(description?

.uppercased()

)

以上**列印結果為optional("success.")if分支首先會判斷n1是否為空,再判斷n2的值是否為200

nil合併運算子

處理可空?型別時的乙個常見?動作時是:要麼?獲取其值(如果可?例項有值),要麼使用某個?預設值(如果可?例項是nil)。可以用nil合併運算子(nil coalescing operator)??來?到這個目的。

舉例
var n1:

int?

n1 =

666let n2:

int= n1 ??0

print

(n2)

以上**列印結果為666

可空型別最好用來表示本來就可以為空的概念,即適合用來表示缺失某些東西的場景。但是缺失不等於零。例如:乙個人養了乙隻寵物狗,其名字就可以為空(只是舉個例子而已…);而乙個人的銀行賬戶餘如果為空就需要用零來表示。

可空型別 ?和??

可空型別可以表示所有實際型別的值加上null。如果和資料庫打交道,這就會很有用,因為在資料庫表中遇到未定義的列是很常見的事情。為了定義乙個可空變數型別,應在底層資料型別中新增問號 作為字尾。注意,這種語法只對值型別是合法的,區域性可空變數必須賦值乙個初始值。定義一些區域性可空型別 int?a 10 ...

C 可空型別

可空型別只能用於值型別,不能用於引用型別,引用型別本身支援null值。如果直接把null賦值給int型別,會出現乙個錯誤 無法將 null 轉換成 int 因為它是一種值型別 賦值時應該使用 int?a null 可空型別與一元或二元運算子一起使用是,如果乙個運算元或兩個運算元都是null,其結果為...

可空型別 C Sharp

1.int num null 2.可空型別的 3.可空型別的定義 參見資料夾裡的demo。的執行結果 介紹兩個方法 1.nullable.getvalueordefault方法 不帶引數 其返回值 自己理解的返回值 返回當前值或者預設值0。2.nullable.getvalueordefault t...