Swift-- 最讓人蛋疼的就是? ! ??

可選類型: 代表着可以有也可以沒有 OC中的Optional 等於 Swift中 ?
以後一旦看到一個方法或者數據類型後面有? , 就代表返回的是一個可選類型

// example:
let name:String? = "DaiSuke"
var url:String? = "www.baidu.com"
// 都表示這兩個變量的值可有可無,有值就是一個確定的值,比如DaiSuke,沒有就是nil

初學者看到? 需要淡定一點, 因爲從OC轉入Swift之後, 最讓人蛋疼的就是? ! ??
初學者對於? ! 最好藉助編譯器來解決問題

// example:
let url = NSURL(string: "http://www.baidu.com/")
print(url)
// 不加!表示可選值optional,不一定要有值,可以爲空
print(url!)
// 加!表示一定有值,必須有值,如果沒值,爲nil,你慘了報錯,直接在編譯器就給你砍掉

var url = NSURL(string: "http://www.baidu.com/")
url = nil
print(url)
print(url!) 
// 加!表示一定有值,必須有值,如果沒值,爲nil,你慘了報錯,直接在編譯器就給你砍掉

使用可選類型需要注意, 如果直接打印可選了類型, 那麼打印出來的值會被Optional包裹
! 代表告訴編譯器, 可選類型中一定有值, 強制解析
如果可選類型中沒有值, 而又進行了強制解析, 那麼程序就會崩潰

可選值的方法使用 ?? 操作符來提供一個默認值。如果可選值缺失的話,可以使用默認值來代 替。
??

let url3:String? = "hahaha"
let url4 = "http://www.baidu.com/"
print("\(url3 ?? url4)")

這裏寫圖片描述

let url3:String? = nil
let url4 = "http://www.baidu.com/"
print("\(url3 ?? url4)")

這裏寫圖片描述
?? 的作用正如代碼寫的那樣,如果前者缺失值,就會用後者代替

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章