/**
可選值: optionals
加上個問號
兩種狀態一種是有值,另一種是沒有值nil
可選值可以用 if語句來進行判斷的
*/
// 這個就是可選值,有值是整型9
let optionValue:Int? = 9
print(optionValue)
// Optional(9)
if optionValue !=nil
{
print(optionValue)
// Optional(9)
}
print("------------->>")
// 這裡的!表示對可選值的一個強制解析 (unwrapping解包)
let sValue:Int = optionValue!
print(sValue)
// 9
// 沒有值
let optionValue1:Int? =nil
if optionValue1 ==nil
{
print(optionValue)
// Optional(9)
}
print("------------->>")
// 注意這個不是編譯時的錯誤,是運行時的錯誤
// fatal error: unexpectedly found nil while unwrapping an Optional value
// 空的對象,不可以對它進行強制解析,加上歎號強制解包
// var sValue1: Int = optionValue1!
// print(sValue1)
// 可選綁定
ifvar sValue1 = optionValue1
{
print(sValue1)
}
/**
隱式解析可選類型,兩種狀態
有值,沒有值nil
*/
let imOptValue:Int! = 111
print("------------->>")
if imOptValue !=nil {
print(imOptValue)
}
print("iValue------------->>")
// 可選綁定
iflet iValue = imOptValue {
print(iValue)
}
print("iValue2------------->>")
// 這個地方我們定義了隱式可選類型後呢,不需要在強制解包(加歎號),
let iValue2:Int = imOptValue
print(iValue2)
/**
無論是普通的可選型,還是隱式的可選型,
對於一個沒有值的進行解包都會引起一個運行時的錯誤
*/
/**
1.常量和變量
Swift語言中是用let來定義常量,並且要初始化。var來定義變量,
在let或者var後面申明類型,冒號+空格,然後再加上類型名稱。
2.optional(可選)變量
可選變量用於處理值缺失的情況,有點類似於OC中的nil,可以用於任何類型上,不僅僅是類,不過更加安全。Swift是類型安全的一門語言,可以很少申明類型。
附:Swift和Objective-C中nil的區別
1)OC中,nil是一個指向不存在對象的指針;
2)Swift中,nil不是指針,它是一個確定的值,用於表示值缺失。任何類型的可選狀態都可以設置為nil,不只是對象類型;
3.深入了解Optional變量
Optional其實就是一個enum,裡面有None和Some類型。nil就是Optional.None,非nil就是Optional.Some,通過Some(T)包裝原始值,所以在是用Optional的時候要進行拆包。
聲明一個可選類型的時候要在類型後面加上?如:var str : String?
var strValue: String?
意思不是“我聲明了一個Optional的String值”,而是我聲明了一個Optional類型值。
對一個可選類型的值,需要進行拆包才不會報錯。
拆包有兩種方式,如下:
1)Optional Binding
如:
if let str = strValue
{
let hashValue = str.hashValue
}
*/