【问题标题】:Print uppercase version of enum label打印枚举标签的大写版本
【发布时间】:2020-11-03 10:26:48
【问题描述】:

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

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

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

我可以打印值

let get = HTTPMethod.get
print (get) // 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)!
    }
}

那么怎么写枚举的大写标签呢?

【问题讨论】:

    标签: swift enums


    【解决方案1】:

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

    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"
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果它只是枚举案例的精确大写版本,我会这样做。 如果它们不同,那么我会按照大卫的回答进行。

      public enum HTTPMethod {
        case get
        case post(body: [String: Any])
        case put
        case delete
        case patch
        var value: String? {
         return String(describing: self).uppercased()
      }
      let val = HTTPMethod.get.value
      print(val) //prints "GET"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-17
        • 2023-02-25
        • 1970-01-01
        • 1970-01-01
        • 2019-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多