Nested Types
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.rawValueprint(L) // Low