在OC
開發(fā)中,如果一個變量暫時不使用,可以賦值為0(基本屬性類型)
或者賦值為空(對象類型)
在swift
開發(fā)中,nil
也是一個特殊的類型.因為和真實的類型不匹配是不能賦值的(swift是強類型語言),但是開發(fā)中賦值nil,在所難免.因此推出了可選類型
定義可選類型
// 注意:name的類型是一個可選類型,但是該可選類型中可以存放字符串.
// 寫法一:定義可選類型
let name : Optional<String> = nil
// 寫法二:定義可選類型,語法糖(常用)
let name : String? = nil
可選綁定
// 可選綁定(固定格式) :系統(tǒng)幫我們做了兩件事情
// 1> 判斷后面的name是否有值, 如果沒有值,則直接跳過{}
// 2> 如果name有值,那么系統(tǒng)會自動對可選類型進(jìn)行解包, 并且將解包后的結(jié)果賦值給前面的name
if let name = name {
print(name)
}
可選鏈
// ?.就是可選鏈:
// 系統(tǒng)會自動判斷該可選類型是否有值,如果有值,則解包, 如果沒有值, 則賦值為nil。
// 注意: 可選鏈條獲取的值,一定是一個可選類型
if let price = p.dog?.toy?.price { // Double/nil
print(price)
}
例子
// 1.根據(jù)一個字符串, 創(chuàng)建URL
if let url = URL(string: "http://www.baidu.com/中文") {
URLRequest(url: url)
}
// 2.根據(jù)一個文件的名稱, 獲取文件的路徑
let path : String? = Bundle.main.path(forResource: "demo1.plist", ofType: nil)
if let path = path {
NSArray(contentsOfFile: path)
}
// 3.從字典中取值;
let dict : [String : Any] = ["name" : "gzp", "height" : 1.88, "age" : 18]
if let name = dict["name"] as? String {
print(name.characters.count)
}