«Перечисление со связанным значением» может быть тем, что вы ищете:
enum StringOrInt {
case string(String)
case int(Int)
}
Вы можете назначить строку или целое число:
var value: StringOrInt
value = .string("Hello")
// ...
value = .int(123)
Получение содержимого осуществляется с помощью оператора switch:
switch value {
case .string(let s): print("String:", s)
case .int(let n): print("Int:", n)
}
Если вы заявляете о соответствии протоколу Equatable
, то
Вы также можете проверить значения на равенство:
enum StringOrInt: Equatable {
case string(String)
case int(Int)
}
let v = StringOrInt.string("Hi")
let w = StringOrInt.int(0)
if v == w { ... }