解釋Swift語言中解包可選值的各種方法


將變數宣告為可選值總是推薦的做法,也應該是開發人員的首選。如果變數可能無效(nil或其他型別),則應將其標記為可選值。

作為開發者,我們認為編寫安全可靠的程式碼是我們的責任。為了實現這一點,Swift 提供了多種概念,可選值就是其中之一。

可選變數可能包含nil值,因此我們必須安全地獲取其值。有幾種方法可以解包可選變數的值。讓我們來學習一下。

首先,我們需要了解Swift中的可選值是什麼。

可選值

當我們從其他來源(如後端伺服器)接收值時,此值在初始點可能包含有效值或沒有任何值。在這種情況下,可以使用可選值來表示具有兩種可能情況的變數——要麼是一個值,要麼根本沒有值。

var possibleNumber = "450"
var convertedNumber = Int(possibleNumber)

在上例中,有一個輸入字串,我們將其轉換為Int。但是,此字串可能不是有效的整數。在這種情況下,一旦我們使用Int()函式將此字串轉換為整數,它將返回一個可選整數。這意味著輸出可以是nil或一個有效的整數值。

解包可選值

從可選變數中獲取值(有效值或nil)稱為解包。要使用可選變數中的轉換值,我們必須安全地轉換它們。

值可以透過多種方式獲取,但每種方法都用於不同的情況。

  • 強制解包

  • 可選繫結

  • 可選鏈

  • 使用空合併運算子

強制解包(不推薦)

示例

在此方法中,您可以透過在變數名後新增感嘆號(!)來訪問該值。如下所示:

var errorMessage: String? = "Invalid URL found"
print(errorMessage!)

輸出

Invalid URL found

如果您確定可選變數包含值,則可以使用它(!),否則,如果變數不包含值,則應用程式將崩潰。簡單的感嘆號意味著:“我知道這個可選值肯定有值;請使用它。”

示例

有一種方法可以先檢查,然後像下面這樣使用感嘆號和可選變數

var errorMessage: String? = "Invalid URL found"
if errorMessage != nil {
   print("error message is not nil: \(errorMessage!)")
}

輸出

error message is not nil: Invalid URL found

解釋

首先,我們宣告一個字串型別的可選變數。接下來,我們檢查變數是否不等於nil。如果不等於nil,則列印變數的值。透過這種方式,您的應用程式不會崩潰,因為您已經對其進行了檢查。

可選繫結(推薦)

這是讀取可選變數值的推薦方法。在此方法中,您將檢查變數是否具有值。如果找到值,則將該值儲存在區域性常量或變數中。

可選繫結可用於有條件地執行程式碼、控制迴圈的執行以及建立當前作用域的提前退出路徑。多個可選繫結可以用於一個語句,並且可選繫結可以與可選鏈結合使用以使程式碼更簡潔。

示例

讓我們看一個例子:

var errorMessage: String? = "Invalid URL found"
if let message = errorMessage {
   print("Error message: \(message)")
}

輸出

Error message: Invalid URL found

在這裡,您將值儲存在一個臨時常量“message”中,然後使用它。如果errorMessage沒有值或為nil,則if條件將不成立。因此,您可以看到這是一種非常安全的方法,可以從可選變數中解包值。

使用可選鏈

示例

當您一次處理多個可選變數時,您可能需要使用多個if-let語句。為了避免這種混亂,我們可以使用可選鏈來解包值。

struct College {
   let name: String
   var address: String?
}
struct Student {
   let name: String
   let grade: Int
   var college: College?
}
let martin: Student? = Student(name: "Martin", grade: 5)
// here, getting the address using optional chaining.
if let address = martin?.college?.address {
   print("address: \(address)")
} else {
   print("address not found")
}

輸出

address not found

使用空合併運算子

這是一個非常簡單簡短的表示法,可以避免if-else塊語句。如果在可選變數中找到nil值,我們可以返回一個預設值。

示例

在此,在非nil值的情況下使用解包的值。否則,將使用預設值。

var name: String?
let nameString = name ?? "Default value"
print(nameString)

輸出

Default value

結論

為了處理可選值,我們可以應用各種方法來解包可選值。在Swift語言中,每種方法都可以用於不同的目的。始終建議使用安全的方法來解包可選值,以防止應用程式出現意外崩潰。

更新於:2022年12月21日

528 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告