ios - Swift 5 - 枚举内的枚举
问题描述
我正在尝试使用枚举对项目进行分类。因此,我最终在枚举中使用了枚举。而且我不完全确定整个枚举是如何工作的。
但我想要做的是利用枚举 MaterialClassification,然后如果有第二个枚举,例如粘土,则利用该枚举的值将其作为字符串返回。
enum MaterialClassification {
case clay(value: Clay)
case flux//(value: Fluxs)
case glassFormer
case stain//(value: Clay)
case accessoryMaterial
case all//(value: Clay)
}
extension MaterialClassification {
var materiaIdentifier: String {
switch self {
case .clay:
return "clay"
case .flux:
return "flux"
case .glassFormer:
return "glassFormer"
case .stain:
return "stain"
case .accessoryMaterial:
return "accessoryMaterial"
case .all:
return "all"
}
}
}
enum Clay {
case iskaolin// = "Kaolin"
case isPrimaryKaolin// = "Primary Kaolin"
case isSecondaryKaolin //= "Secondary Kaolin"
case isBallClay //= "Ball Clay"
case isStoneware// = "Stoneware"
case isFireClay //= "Fire Clay"
case isEarthenware// = "Earthenware"
case isVolcanicClay// = "Volcanic"
}
extension Clay {
var clayType: String {
switch self {
case .iskaolin:
return "Kaolin"
case .isPrimaryKaolin:
return "Primary Kaolin"
case .isSecondaryKaolin:
return "Secondary Kaolin"
case .isBallClay:
return "Ball Clay"
case .isStoneware:
return "Stoneware"
case .isFireClay:
return "Fire Clay"
case .isEarthenware:
return "Earthenware"
case .isVolcanicClay:
return "Volcanic Clay"
}
}
}
我的目标是能够在需要时返回嵌套字符串。例如:
materialClassification: MaterialClassification.clay(type: Clay.isPrimaryKaolin)
我需要一种方法来返回“初级高岭土”。但我不知道如何连接 2 个枚举。
解决方案
如果我正确理解您的问题,您希望访问关联类型的属性。您可以将新属性添加到您的MaterialClassification
枚举并使用它来访问您的案例。
像这样的东西应该工作
var type: String? {
switch self {
case .clay(let clay):
return clay.clayType
case .flux(let flux):
return flux.fluxType
case .stain(let stain):
return stain.stainType
case .glassFormer, .accessoryMaterial, .all:
return nil
}
}
推荐阅读
- laravel - 在 Laravel 中更改查询字符串的值
- after-effects - After Effects - 合成选项卡中的双视图
- php - PHP Laravel REST api 双反关系
- python-3.x - TensorFlow 2.0 - 学习率调度器
- typescript - 在 Typescript 中使用交集类型扩展函数参数类型
- kotlin - 使用 Kotlin Exposed 创建数据库后连接到数据库
- jquery - How to modify close button in submenu of jQuery mobile for initial opening
- java - 如果我按 Enter 或关闭键盘,EditText 会更改大小
- sip - Linphone opus 编解码器采样率
- components - 在 App 组件旁边动态呈现 Blazor 组件