Swift Optional型別


Swift 4還引入了Optional型別,它處理缺少值。 Optional簡單的解釋是:「有一個值,它等於x」或「根本沒有值」。

一個Optional本身就是一種型別,實際上是Swift 4的新超級列舉之一。 它有兩個可能的值,NoneSome(T),其中T是Swift 4中可用的正確資料型別的關聯值。

這是一個Optional的整數宣告 -

var perhapsInt: Int?

下面是一個OptionalString宣告 -

var perhapsStr: String?

通過以下範例來了解Optional如何在Swift 4中工作 -

var myString:String? = nil

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

當使用playground執行上述程式時,得到以下結果 -

myString has nil value

Optional類似於在Objective-C中使用nil和指標,但它們適用於任何型別,而不僅僅是類。

1.強制解包

如果將變數定義為Optional,那麼要從此變數中獲取值,必須將其解包。在變數的末尾新增一個感嘆號。

看看下面一個簡單的例子 -

var myString:String?

myString = "Hello, Swift 4!"

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

當使用playground執行上述程式時,得到以下結果 -

Optional("Hello, Swift 4!")

現在應用解包來獲取變數的正確值 -

var myString:String?

myString = "Hello, Swift 4!"

if myString != nil {
   print( myString! )
} else {
   print("myString has nil value")
}

當使用playground執行上述程式時,得到以下結果 -

Hello, Swift 4!

2.自動解包

可以使用感嘆號而不是問號宣告Optional變數。 這些Optional變數將自動解包,您無需在變數末尾使用任何其他感嘆號來獲取指定的值。 看看一個簡單的例子 -

var myString:String!
myString = "Hello, Swift 4!"

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

當使用playground執行上述程式時,得到以下結果 -

Hello, Swift 4!

3.Optional系結

使用Optional係結來確定Optional項是否包含值,如果是,則使該值可用作臨時常數或變數。

if語句的Optional係結如下 -

if let constantName = someOptional {
   statements
}

下面是一個簡單的例子來理解Optional係結的用法 -

var myString:String?
myString = "Hello, Swift 4!"

if let yourString = myString {
   print("Your string has - \(yourString)")
} else {
   print("Your string does not have a value")
}

當使用playground執行上述程式時,得到以下結果 -

Your string has - Hello, Swift 4!