Я могу упустить что-то, что вы действительно хотите сделать, но я обычно не использую вложенные типы для представления структуры данных, которую необходимо анализировать и получать к ней динамический доступ.
Видя ваш пример кода, я бы использовал словарь.
enum HousingType: Hashable {
case house(HousingSubType)
case apartment(HousingSubType)
case mansion(HousingSubType)
enum HousingSubType: CaseIterable {
case victorian
case modern
case standard
}
var name: String {
return structures[self]!.name
}
static var allCases: [HousingType] {
return
HousingType.HousingSubType.allCases.map(HousingType.house)
+ HousingType.HousingSubType.allCases.map(HousingType.apartment)
+ HousingType.HousingSubType.allCases.map(HousingType.mansion)
}
}
struct Structure {
let name: String
let rooms: Int
let bathrooms: Int
}
let structures: [HousingType: Structure] = [
.house(.victorian): Structure(
name: "Victorian House",
rooms: 4,
bathrooms: 1
),
.house(.modern): Structure(
name: "Modern House",
rooms: 4,
bathrooms: 4
),
.house(.standard): Structure(
name: "Standard House",
rooms: 4,
bathrooms: 2
),
.apartment(.victorian): Structure(
name: "Victorian Apartment",
rooms: 2,
bathrooms: 1
),
.apartment(.modern): Structure(
name: "Modern Apartment",
rooms: 2,
bathrooms: 2
),
.apartment(.standard): Structure(
name: "Standard Apartment",
rooms: 2,
bathrooms: 1
),
.mansion(.victorian): Structure(
name: "Victorian Mansion",
rooms: 10,
bathrooms: 3
),
.mansion(.modern): Structure(
name: "Modern Mansion",
rooms: 10,
bathrooms: 10
),
.mansion(.standard): Structure(
name: "Standard Mansion",
rooms: 10,
bathrooms: 6
),
]