先看乙個例子吧!
let str="hello world"
let num:int=int(str)
這兩行**的意思str字串轉換成int型別,嘿嘿!這不是坑計算機嗎?hello world能轉換成int型別的數字嗎?很顯然不能,而且我們執行都不會通過的!
可是我們把第二行**換成
let num:int?= int(str)
編譯就通過了!就這樣可選型別就呼之欲出!
定義:在任何型別後面緊跟乙個?就可以代表可選型別,可選型別的變數可用於處理「值缺失」的情況。
int型別的變數或常量只能接受int型別的資料,而int?可以接受值缺失的狀況,也就是能接受值為nil。
var age:int=nil 這個顯然是錯誤的
var age:int?=nil 這個是可以的
注意:int?和int型別並不是相同的型別,程式不能直接把int?型別的變數或者常量直接拿來當int型別的變數或常量使用。
為了獲取可選型別的常量或變數的實際儲存值需要用在後面加!進行解析。這個!的含義是:已經知道該可選變數有值了(要是實際裡面沒有值系統就會崩潰),提取裡面的值。這種新增感嘆號進行解析的用法叫做強制解析。
例如:
let str1:string?="hello"
let str2:string?=" word"
let result = str1! + str2!
print(result)
之前說了使用!的前提是可選變數確實有值了,否則就會崩潰,所以我們需要提前判斷可選型別是否有值。所以上面的**這樣寫才正規一些:
let str1:string?="hello"
let str2:string?=" word"
if str1 != nil && str2 != nil
else
}
除了在任意已有型別後面新增?來表示可選型別外,可以加!來表示可選型別。
其中int?和int! 型別的區別在於:當用int?表示可選型別的時候必須用!字尾強制解析,而程式用!型別表示可選變數時,無需在後面增添!字尾執行強制解析。swift會自動執行隱式解析。
let str1:string!="hello"
let str2:string!=" word"
if str1 != nil && str2 != nil
else
最後用乙個表清晰展示下可選型別的差異吧!
intint?
int!
是否可儲存整數是是
是否接受nil否是
是否需要強制解析為int否是
人生故事之二
說有兩兄弟,他們一起住在一幢公寓樓裡。一天,他們一起出去郊外爬山。傍晚時分,等他們爬山回來,回到公寓樓的時候,發現一件事 大廈停電了!這真是一件令人沮喪的事情。為什麼呢?因為很不巧,這兩兄弟是住在大廈的頂樓。那麼,頂樓是幾樓呢?那就更加不巧了,頂樓是八十樓。很恐怖吧。雖然兩兄弟都揹著大大的登山包,但...
CDN總結之二
cdn中的三個主要角色為 cdn提供者 內容提供者以及使用者。內容提供者在cdn提供者那兒進行註冊而使用服務,將其內容儲存到cdn提供者分布式的 伺服器上。內容可能是以提前準備的方式或者基於使用者需求的方式儲存在 伺服器上,以響應使用者的訪問。使用者的請求將會被最近的 伺服器響應。cdn提供者負責進...
python筆記之二
2.使用python實現http連線 其實使用python實現http連線的方法還是十分簡單的。比如說,我們不要求什麼,僅僅只需要獲取內容時,我們可以這樣的書寫 但是對實際應用來說,這個簡單的句子也是不能夠滿足我們各式各樣的開發需求的。比如說,我們需要user agent redirects gzi...