可選類型
可選類型的介紹
-
注意:
- 可選類型是swift中比較難理解的一個知識點
- 可以多利用Xcode的提示來使用
-
概念:
- 在OC開發中,如果一個變量暫時不使用,我們通常會先賦值為0(基本數據類型)或者賦值為空(對象類型)
- 在swift開發中,nil是一個特殊的類型,因為和實際真實的類型不匹配是不能賦值的(swift是強類型語言)
- 但是由于在開發中賦值為nil是在所難免的,因此推出了可選類型
-
可選類型的取值:
- 空值
- 有值
定義可選類型
- 定義一個可選類型有兩種寫法
- 最基本的寫法
- 語法糖(常用)
// 錯誤寫法
let string : string = nil
// 正確寫法
// 注意:name的類型是一個可選類型
// 寫法一:定義可選類型
let name : Optianal<String> = nil
// 寫法二:定義可選類型,語法糖(常用)
let name : String? = nil
可選類型的使用
// 演練一:給可選類型賦值
// 定義可選類型
var string : Optional<String> = nil
// 給可選類型賦值
// 錯誤寫法:因此該可選類型中只能存放字符串
string = 123
// 正確寫法:
string = "Hello World"
// 打印結果
print(string)
// 結果:Optional("Hello World"\n)
// 因為打印出來的是可選類型,所以會帶Optional
// 演練二:取出可選類型的值
// 取出可選類型的真實值(解包)
print(string!)
// 結果:Hello World\n
// 注意:如果可選類型為nil,強制取出其中的值(解包),會出錯
string = nil
print(string!) // 報錯
// 正確寫法:
if string != nil {
print(string!)
}
// 簡單寫法:為了讓在if語句中可以方便使用string
// 可選綁定
if let str = string {
print(str)
}
真實應用場景
- 目的:讓代碼更加嚴謹
// 通過該方法創建的URL,可能有值,也可能沒有值
// 錯誤方法:如果返回值是nil時,就不能接受了
// 如果字符串中有中文,則返回值為nil,因此該方法的返回值就是一個可選類型,而使用一個NSURL類型接收是錯誤的
let url : NSURL = NSURL(string: "www.baidu.com")
// 正確寫法:使用可選類型來接收
let url : NSURL? = NSURL(string: "www.baidu.com")
// 該方式利用類型推導
let url = = NSURL(string: "www.baidu.com")
// 通過url來創建request對象:在使用可選類型前要先進行判斷是否有值
// 該語法成為可選綁定(如果url有值就解包賦值給tempURL,并且執行{})
if let tempUrl = url {
let request = NSURLRequest(URL: tempUrl)
}