如何在 Swift 中測試帶有關聯值的列舉的相等性?


在 Swift 中,您可以使用 Equatable 協議來比較帶有關聯值的列舉。在本文中,我們將透過一個示例瞭解如何使用 Equatable 協議來比較它們。

帶有關聯值的列舉

在 Swift 中,您可以為列舉情況提供一個值。這使得 Swift 中的列舉更加強大。Swift 中稱為帶有關聯值的列舉的功能使您能夠設計一種型別,該型別可以具有一組有限的情況,每種情況都可以具有一組唯一的任何型別的關聯值。這使您能夠將資料鏈接到每種列舉情況。

以下是如何建立帶有關聯值的列舉的示例:

enum Temperature {
   case Celsius(Double)
   case Fahrenheit(Double)
   case Kelvin(Double)
}

此示例中的 Temperature 列舉有三種情況:Celsius、Fahrenheit 和 Kelvin。每種情況都關聯了一個型別為 Double 的值。

示例

因此,您可以像這樣生成 Temperature 列舉的例項

let celsius = Temperature.Celsius(25.0)
let fahrenheit = Temperature.Fahrenheit(77.0)
let kelvin = Temperature.Kelvin(298.0)
print("Temperature in Celsius:", celsius)
print("Temperature in Fahrenheit:", fahrenheit)
print("Temperature in Kelvin:", kelvin)

輸出

Temperature in Celsius: Celsius(25.0)
Temperature in Fahrenheit: Fahrenheit(77.0)
Temperature in Kelvin: Kelvin(298.0)

示例

這是如何將關聯值用於列舉的示例。在以下示例中,temperatureString 函式接受一個作為 Temperature 列舉例項的引數,並返回一個表示溫度的字串。使用 switch 語句匹配列舉的不同情況,然後提取相關值並用於構建字串。

import Foundation
enum Temperature {
   case Celsius(Double)
   case Fahrenheit(Double)
   case Kelvin(Double)
}

func temperatureString(_ temperature: Temperature) -> String {
   switch temperature {
      case .Celsius(let value):
      return "\(value)°C"
      case .Fahrenheit(let value):
      return "\(value)°F"
      case .Kelvin(let value):
      return "\(value) K"
   }
}

let celsius = Temperature.Celsius(25.0)
print(temperatureString(celsius))

輸出

25.0

如何比較它們?

在上面的列舉中,我們將使用 Equatable 協議來比較兩個列舉。在此示例中,celsius1 和 celsius2 具有相同的情況和相同的關聯值“25.0”,因此它們被認為是相等的。另一方面,celsius1 和 celsius3 具有相同的情況,但關聯值不同,因此它們不被認為是相等的。

示例

import Foundation
enum Temperature: Equatable {
   case Celsius(Double)
   case Fahrenheit(Double)
   case Kelvin(Double)
}
let celsius1 = Temperature.Celsius(25.0)
let celsius2 = Temperature.Celsius(25.0)
let celsius3 = Temperature.Celsius(27.2)
if celsius1 == celsius2 {
   print("celsius1 and celsius2 are equal")
} else {
   print("celsius1 and celsius2 are not equal")
}
if celsius1 == celsius3 {
   print("celsius1 and celsius3 are equal")
} else {
   print("celsius1 and celsius3 are not equal")
}

輸出

celsius1 and celsius2 are equal
celsius1 and celsius3 are not equal

結論

Swift 透過您可以在其中將值與列舉情況關聯的強大列舉為您提供了強大的功能。您可以定義 n 個帶有任何型別關聯值的情況。您也可以在 Swift 中將自定義型別與列舉關聯。

即使具有關聯值,您也可以比較列舉例項。例如,您希望比較兩個類似於自定義物件的列舉物件。為了比較列舉,您必須在列舉宣告時符合 Equatable 協議。此協議使您能夠比較列舉物件。

更新於: 2023年4月11日

2K+ 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.