Have a variable with multiple types in Swift

An “enumeration with associated value” might be what you are looking for:

enum StringOrInt {
    case string(String)
    case int(Int)
}

You can either assign a string or an integer:

var value: StringOrInt
value = .string("Hello")
// ...
value = .int(123)

Retrieving the contents is done with a switch-statement:

switch value {
case .string(let s): print("String:", s)
case .int(let n): print("Int:", n)
}

If you declare conformance to the Equatable protocol then
you can also check values for equality:

enum StringOrInt: Equatable {
    case string(String)
    case int(Int)
}

let v = StringOrInt.string("Hi")
let w = StringOrInt.int(0)
if v == w { ... }

Leave a Comment