swift 可選型別筆記

2022-03-14 12:42:43 字數 1515 閱讀 5654

晚上十一點半了,看書累了,原本想睡了的,想了想,還是把剛看的總結一下,把這篇筆記寫了吧。廣州下雨,真特麼的冷。。好了,廢話不說了,說正題說說swift可選型別。

先定義乙個變數:

var string="zhangxu"

想想這個變數要強轉成 int 型別的會怎樣?

// var zint: int  = string.toint()  這樣子肯定是不行的,沒發轉換成 int 型別的,那有沒有想過 zint 的值會是什麼呢?  這時候我們今天的主角,可選型別就登場了!

var zint : int? = string.toint()

這句**就描述的是可選型別, 所以 zint 的型別不是 int 型別的,切記!它是 int?(可選型別)

那這個zint的值會是什麼呢,int?與int 的不同點我們知道了,也就明白了!

int? 可選型別,它能接受到的值得型別有兩種。int 型 與 nil 值,這裡的  nil 中的 nil 完全不是同乙個概念,待會我們闡述!

int 型卻只能接受 int 型的值,不能接受 nil 值!

所以,上面那個問題的答案我們也就知道了,zint 的 值 是nil  ,因為上面的強轉是不會成立的。 而 zint 的型別確實是 int? 型別,它能接受nil 值,所以它的值是 nil

這就是第一點,可選型別! 

有了可選型別,也就隨之強制解析了(最重要的一點,只有可選型別,才能解析!!!) 接著以前面的zint為例:

我再定義乙個變數

//   var zx:int = zint  這裡會編譯錯誤的。原因就是zint的值為nil ,前面說了int 不接受nil值

看下面的**:

var zx:string?=@"123456789"

// var z:string = zx 這裡錯誤的原因是他們的型別不一樣,大家琢磨一下!

但我這樣寫

var z:string = zx!

這樣寫是沒有問題的,但還是不嚴謹!這裡的zx!就是做了解析的處理,他就是為了獲取 zx 這個變數確實存在的值!沒有值是解析失敗,在執行的時候報錯的,所以說這裡寫的不嚴謹,我們嚴謹一點因該這樣子寫

if zx != nil

最後一點了,說說隱式可選型別 ,先說一點,前面我們說的在型別後面加 ? 的其實就是顯式的。

看下面: 

var zx : string!="12345678"

var z: string = zx

首先說明這樣子寫是沒有問題的! 在後面加 !號,就是我們說的隱式可選型別,其特點大家知道了,也就不難理解為什麼那樣子寫是可以的,因為加了 ! 之後swift會自己進行隱式的解析!就這麼簡單的一句話,它自己解析了!!既然解析了,就可以直接賦值給變數 z 了,也就不覺得奇怪了,因為我們知道可選型別要賦值給不可選的型別的時候必須必須要進行解析!!!

就這樣子先,明天還要上班,睡覺吧,十二點半了。。明天加油!晚安張小旭!

Swift筆記 可選型別

c 和 objective c 中並沒有可選型別這個概念。最接近的是 objective c 中的乙個特性,乙個方法要不返回乙個物件要不返回nil,nil表示 缺少乙個合法的物件 然而,這只對物件起作用 對於結構體,基本的 c 型別或者列舉型別不起作用。對於這些型別,objective c 方法一般...

Swift 可選型別

swift 可選型別 optionals 可選型別 強制解析 自動解析 可選繫結 1.可選型別 加入我們建立乙個變數,但是它有可能為空,這時候swift提供乙個符號 來表示這是乙個可能為空的變數 var thisstr string?看到這裡的if,沒錯,if或者for迴圈後面的內容不加 加了也沒錯...

Swift 可選型別

在 swift 中,可選型別用來處理值可能缺失的情況,表示下面兩種情況 在 swift 中宣告變數時,使用?或 來表示宣告的變數是可選型別。let name string?var age int 此時,變數name和age預設都是nil,表示空。而?和 的區別在於使用前者宣告的變數所包含的值時,需要...