如何在不使用switch的情况下返回带有参数的枚举值?

问题描述

我有一个enum,它返回了一个string和发送的parameter ID。但是由于我只使用一种情况,所以没有理由使用switch 。所以问题是,如何在不使用switch的情况下返回与下面相同的内容?

enum MyEnum  {
    
    case myCase(id: Int)
    
    var description: String {
        switch self {
        case .myCase(let id):
            return "myCase\(id)"
        }
    }   
}

我尝试这样做:

    var description: String {
        return "myCase\(id)"
    }

,但无法识别ID。在先前的代码中,我使用了let id,但此处不能使用。 (作为附带说明,我不能说我了解如何使用let id并返回parameter创建时发送的let id会创建一个新变量,不是吗?)

解决方法

说实话,这不是最好的解决方案。您可能会忘记其他情况。更好地使用switch case

enum MyEnum  {
    
    case myCase(id: Int)

    var description: String {
        if case let .myCase(id: id) = self {
            return "myCase\(id)"
        }
        
        return "unknown case"
    }
}

使用guard

或其他解决方案
enum MyEnum  {
    
    case myCase(id: Int)
    
    var description: String {
        guard case let .myCase(id: id) = self else {
            return "unknown case"
        }
        
        return "myCase\(id)"
    }
}

如果您添加了新的保护套而忘记了它,也可以将return "unknown case"替换为fatalError("uknown case")

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...