Enumerations, classes or structures can be nested in another type.
struct Closh {
enum Size: String{
case H = "high", M = "Medium", L = "Low"
}
enum Detail: Int {
case H = 180, M = 170, L = 160
struct Price {
let normal: Int, discount: Int?
}
var price: Price {
switch self {
case .H:
return Price(normal: 100, discount: 90)
case .M:
return Price(normal: 90, discount: 80)
case .L:
return Price(normal: 80, discount: 70)
default:
return Price(normal: self.rawValue, discount: nil)
}
}
}
let size: Size, detail: Detail
var description: String {
return "\(size.rawValue), PriceNormal: \(detail.price.normal) PriceDiscount: \(detail.price.discount)"
}
}
var closh = Closh(size: .M, detail: .M)
print(closh.description)
// Print: Medium, PriceNormal: 90 PriceDiscount: Optional(80)
Referring to Nested Types
var L = Closh.Size.L.rawValue
print(L) // Low