可選類型(可以有值, 也可以沒有值)
- 在OC中我們可以給一個對象類型變量賦值為nil或者一個對象, 而在Swift中如果想給一個變量賦值為nil那么必須明確指定為可選類型才可以, 也就是說普通變量是不能賦值為nil的
- 格式: 數(shù)據(jù)類型?
let num1: Int? = 10
// 以后但凡看到init后面跟上一個?, 就代表初始化方法返回的值是可選的
注意:
- 可選類型是不能直接使用的, 如果想使用一個可選類型的值, 必須對可選類型進行解包 !
let str = "http://www.520it.com/"
let url = NSURL(string: str)
print(url!)
// 注意: Swift不推薦我們隨便使用強制解包
let sum = num1! + num2
if let temp = num1
{
let sum = temp + num2
}
解包的含義: 告訴系統(tǒng)可選類型的變量, 一定有值, 如果可選類型的值沒有值, 我們又進行了強制解包, 那么就會報錯
-
可選綁定
- 專門用于解決強制解包的弊端
- 注意: 開發(fā)中如果想使用一個可選類型的值, 也不一定一定用可選綁定, 因為如果可選類型的值較多, 而又都屬于同一個邏輯, 那么一不小心就會形成if嵌套
let url2 = NSURL(string: str)
print(url2)
// 取出url2的值賦值給temp, 如果取到了值那么就可以進入if后面的大括號, 如果沒有取到值(nil), 就不會進入if后面的大括號
if let abc = url2
{
print(abc)
}
let v1: Int? = 10
let v2: Int? = 20
let v3: Int? = 30
if let n1 = v1
{
if let n2 = v2
{
if let n3 = v3
{
let sum = n1 + n2 + n3
}
}
}
- guard
- 作用: 類似可選綁定
- 只有條件為假(flase), 才會執(zhí)行else后面大括號中的代碼
- 格式
guard 條件表達式 else
{
// 條件為假就會執(zhí)行
}
func test()
{
guard let m1 = v1 else
{
print("沒有值")
return
}
guard let m2 = v2 else
{
print("沒有值")
return
}
guard let m3 = v3 else
{
print("沒有值")
return
}
let sum = m1 + m2 + m3
}
test()