首页 > 解决方案 > 打印枚举标签的大写版本

问题描述

我似乎无法写下字符串的标签。

我有一个带有关联值的枚举,如下所示:

public enum HTTPMethod {
    case get
    case post(body: [String: Any])
    case put
    case delete
    case patch
}

我可以打印值

let get = HTTPMethod.get
print (get) // get

但我真正想要的是枚举的名称,大写版本。

即得到将是得到

我正在尝试为此编写扩展:

extension HTTPMethod: CustomStringConvertible {
    public var description: String {
        return String(describing: self)
    }
}

也不行

extension HTTPMethod: CustomStringConvertible {
    public var description: String {
        return String(describing: self)
    }
}

带有反射的版本在我的实现中也不起作用:

extension HTTPMethod: CustomStringConvertible {
    public var description: String {
        let mirror = Mirror(reflecting: self)
        return (mirror.children.first?.label)!
    }
}

那么如何写枚举的大写标签呢?

标签: swiftenums

解决方案


您应该在您的实现String中自己添加表示。CustomStringConvertible

public enum HTTPMethod {
    case get
    case post(body: [String: Any])
    case put
    case delete
    case patch
}

extension HTTPMethod: CustomStringConvertible {
    public var description: String {
        switch self {
            case .get: 
                return "GET"
            case .post: 
                return "POST"
            case .put: 
                return "PUT"
            case .delete: 
                return "DELETE"
            case .patch: 
                return "PATCH"
        }
    }
}

推荐阅读