Switch (case let)
Switch case let can be used with enums with associated values.
Example:
enum Barcode {
case qr(String)
case upc(Int, Int, Int, Int)
}
func describe(_ code: Barcode) {
switch code {
case let .qr(value):
print("QR: \(value)")
case let .upc(ns, m, i, c):
print("UPC: \(ns) \(m) \(i) \(c)")
}
}
describe(Barcode.qr("example.com"))
describe(Barcode.upc(0, 12345, 67890, 5))
// Output:
// QR: example.com
// UPC: 0 12345 67890 5
If case let equivalent:
enum Barcode {
case qr(String)
case upc(Int, Int, Int, Int)
}
func describe(_ code: Barcode) {
if case let .qr(value) = code {
print("QR: \(value)")
} else if case let .upc(ns, m, i, c) = code {
print("UPC: \(ns) \(m) \(i) \(c)")
}
}
describe(Barcode.qr("example.com"))
describe(Barcode.upc(0, 12345, 67890, 5))
// Output:
// QR: example.com
// UPC: 0 12345 67890 5
Alternatively, let
can be written before each variable name:
Same example as above:
enum Barcode {
case qr(String)
case upc(Int, Int, Int, Int)
}
func describe(_ code: Barcode) {
switch code {
case .qr(let value):
print("QR: \(value)")
case .upc(let ns, let m, let i, let c):
print("UPC: \(ns) \(m) \(i) \(c)")
}
}
describe(Barcode.qr("example.com"))
describe(Barcode.upc(0, 12345, 67890, 5))
// Output:
// QR: example.com
// UPC: 0 12345 67890 5
If case let equivalent:
enum Barcode {
case qr(String)
case upc(Int, Int, Int, Int)
}
func describe(_ code: Barcode) {
if case .qr(let value) = code {
print("QR: \(value)")
} else if case .upc(let ns, let m, let i, let c) = code {
print("UPC: \(ns) \(m) \(i) \(c)")
}
}
describe(Barcode.qr("example.com"))
describe(Barcode.upc(0, 12345, 67890, 5))
// Output:
// QR: example.com
// UPC: 0 12345 67890 5