Swift 中雙問號“??”有什麼作用?


在本教程中,您將學習在 Swift 語言中使用雙問號(??)。

在 Swift 中,雙問號 (??) 稱為“空合併運算子”。此運算子主要用於在為空值時提供預設值。換句話說,當變數為空值並且您希望在沒有值的情況下提供預設值時,請使用此運算子。

根據 Apple 文件

空合併運算子 (a ?? b) 如果 a 包含值則解包 a,如果 a 為空則返回預設值 b。表示式 a 始終為可選型別。表示式 b 必須與儲存在 a 中的型別匹配。

語法

a != nil ? a! : b

根據語法,如果值 a 不等於 nil,它將返回 a 的包裝值;否則返回 b 值。此處 b 值的型別與 a 型別相同。

基本簽名

我們可以透過使用以下語法來了解此運算子的內部工作方式:

public func ?? (optional: T?,
defaultValue: @autoclosure () throws -> T) rethrows -> T {
   switch optional {
      case .some(let value):
      return value
      case .none:
      return try defaultValue()
   }
}

讓我們透過一些例子來了解它

示例

// declaring a student structure
struct Student {

   // student properties
   var name: String?
   var age: Int?
   var score: Double?
   
   // created a function to display the student information
   func displayInformation() {
      print("Name: \(name ?? "NA")")
      print("Age: \(age ?? 18)")
      print("Score: \(score ?? 0.0)")
   }
}

// created an object called amit
let amit = Student(name: "Amit Sharma", age: nil, score: 8.9)

// displaying information
amit.displayInformation()

輸出

Name: Amit Sharma
Age: 18
Score: 8.9

解釋

在上面的例子中,您可以看到我們正在顯示無值情況下的預設值。由於在這種情況下 age 為 nil,我們正在傳遞一個預設值來代替 nil 值。

最後,Swift 語言中還有一些其他與空合併運算子類似的運算子。讓我們瞭解它們之間的基本區別,以避免混淆。

它們之間的區別

  • 單問號 (?)

  • 它用於使變數成為可選型別。它寫在變數名稱之後。

  • 雙問號 (??)

  • 它用於提供預設值。它也稱為空合併運算子。

  • 帶冒號的單問號 (?:)

  • 此運算子稱為三元運算子。它用於執行語句的流程。基本上,您可以說它是 if-else 語句的簡寫形式。使用它,您可以匹配多個條件並相應地返回值。

  • 可選鏈 (?.)

  • 它用於將任何可選變數或屬性進一步連結到其他屬性或函式呼叫。

結論

此運算子對於在為空值時提供預設值非常有用。很多時候,您會在程式碼中處理可選變數,為了處理 nil 值,此運算子工作得很好。它使程式碼更易讀且簡潔。

如果您的程式碼需要預設值,請隨時使用此運算子。

更新於:2022年12月9日

2K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.