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...