分享
三行代码  ›  专栏  ›  技术社区  ›  StonedStudio

Swift 5-枚举内部的枚举

  •  0
  • StonedStudio  · 技术社区  · 1 周前

    我正在尝试使用枚举对项目进行分类。因此,我最终在枚举中包含了枚举。我也不完全确定整个枚举的工作原理。

    但我想做的是进入枚举的材料分类,然后如果有第二个枚举,比如在case clay中,进入该枚举的值,将其作为字符串返回。

    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)
    

    我需要一种方法来归还“原生高岭土”。但我不知道如何连接这两个枚举。

    1 回复  |  直到 1 周前
        1
  •  0
  •   inankupeli    1 周前

    如果我正确理解您的问题,您需要访问关联类型的属性。您可以将新属性添加到 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
        }
    }