可選類型用來表示值缺失的情況
C和OC中沒有可選類型這個概念
~~~
//可選類型定義
var x : Int?
var y : Int
y = 10
print("\(x) -- \(y)")
//輸出:nil -- 10
~~~
如果注釋掉? y = 10??? 則發生錯誤:

但是可選類型就不會出錯,因為如果聲明了一個可選變量或者常量而沒有賦值,則默認為nil
nil不能用于非可選的常量或者變量
使用? !?? 號獲取可選值
當你確定可選類型確實包含值之后,你可以在可選的名字后?加?個感嘆號( !? )來獲取值。這個驚嘆號表?“我知道這個可選有值,請使?它。”這被稱為可選值的 強制解析
~~~
var str1 : String? = "myName"
print("myName is \(str1)")
print("myName is \(str1!)")
~~~
輸出:
~~~
myName is Optional("myName")
myName is myName
~~~
可選綁定:
~~~
/*
使?可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給?個
臨時常量或者變量。可選綁定可以?在 if 和 while 語句中來對可選類型的值進?判斷并把
值賦給?個常量或者變量。
*/
var str2 : String? = "myStr2"
if let str2Sub = str2 {
print(str2Sub)
}else{
print("無值")
}
//輸出:myStr2
//如果str2可選類型包含一個值,就創建一個str2Sub的變量,并將可選包含的值賦給他
~~~
隱式解析可選類型
~~~
/*
如上所述,可選類型暗?了常量或者變量可以“沒有值”。可選可以通過 if 語句來判斷是否
有值,如果有值的話可以通過可選綁定來解析值。
有時候在程序架構中,第?次被賦值之后,可以確定?個可選類型總會有值。在這種情況
下,每次都要判斷和解析可選值是?常低效的,因為可以確定它總會有值。
這種類型的可選狀態被定義為隱式解析可選類型(implicitly unwrapped optionals)。把
想要?作可選的類型的后?的問號( String? )改成感嘆號( String! )來聲明?個隱式解
析可選類型。
*/
var str3 : String!
str3 = "myStr33333333"
print(str3) //不需要用!取值
//輸出:myStr33333333
~~~
- 前言
- swift控制語句,for,while,repeat-while,if,switch
- swift之聲明常量和變量
- swift之數值類型雜談(數值)
- swift之 元組
- oc與swift混編,OC調用swift,swift調用OC
- swift之可選類型
- swift之數組(Array)、集合(Set)、字典(Dictionary)
- swift之switch續(元組,值綁定,where)
- swift之控制轉移語句,continue,break,fallthrough,return,帶標簽的語句
- swift之函數(functions)
- swift之閉包(closure)
- swift之枚舉
- swift之類和結構體
- swift之屬性
- swift之方法(Methods)