Swift 中問號“?”的含義是什麼?


在本教程中,您將學習 Swift 語言中的問號是什麼,如何使用它以及它的用途。

問號表示什麼?

此問號表示變數可能包含 nil 值或與變數宣告型別相同的值。

在學習問號之前,讓我們先了解一下 Swift 中的可選型別。

可選型別

在 Swift 語言中建立變數時,它可以包含初始值,也可能在初始點不包含任何值。在這種情況下,您使用可選型別來表示具有兩種可能情況的變數:值或根本沒有值。

注意 - 在 Objective-C 中,沒有可選型別的概念。

讓我們用一個例子來理解它 -

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

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

如何定義可選變數?

var possibleMessage: String?

理解這行程式碼的含義非常重要。這裡有一個名為 possibleMessage 的字串型別變數。在字串單詞後面的問號表示該變數可能包含有效的字串值,也可能沒有任何值。

為什麼要使用問號?

var errorMessage: String = "Server not found"

在上面的程式碼行中,我們定義了一個帶有值的字串型別變數。現在,您想將此變數設定為 nil,因為您出於任何原因都不需要此值。讓我們分配一個 nil 值 -

errorMessage = nil

使用上面的程式碼行構建程式碼,您會看到出現如下編譯錯誤 -

error: 'nil' cannot be assigned to type 'String'

錯誤清楚地顯示您無法將 nil 值分配給字串型別變數。

注意 - 您不能將 nil 分配給非可選變數或常量。

那麼如何將 nil 值分配給此變數?是的,您可以透過將此變數設為可選型別來分配 nil 值,如下所示 -

var errorMessage: String? = "Server not found"

現在您可以分配 nil 值,因為您已提前告訴編譯器此變數可能包含 nil 值。

errorMessage = nil
print(errorMessage)

輸出

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 條件將不成立。因此,您可以看到這是一種非常安全的方法,可以從可選變數中解包值。

結論

Swift 的 nil 與 Objective-C 的 nil 不同。在 Objective-C 中,nil 是一個指向記憶體中不存在的物件的指標。在 Swift 中,nil 不是指標,它指向記憶體中不存在的特定型別的值。

更新於: 2022年11月22日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告