Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 打印枚举标签的大写版本_Swift_Enums - Fatal编程技术网

Swift 打印枚举标签的大写版本

Swift 打印枚举标签的大写版本,swift,enums,Swift,Enums,我似乎记不下字符串的标签 我有一个带有关联值的枚举,如下所示: public enum HTTPMethod { case get case post(body: [String: Any]) case put case delete case patch } 我可以打印值 let get = HTTPMethod.get print (get) // get 但我真正想要的是枚举的名称,大写版本 i、 得到就是得到 我正试图为此编写一个扩展: ext

我似乎记不下字符串的标签

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

public enum HTTPMethod {
    case get
    case post(body: [String: Any])
    case put
    case delete
    case patch
}
我可以打印值

let get = HTTPMethod.get
print (get) // get
但我真正想要的是枚举的名称,大写版本

i、 得到就是得到

我正试图为此编写一个扩展:

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)!
    }
}

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

您应该在
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"
        }
    }
}

我会这样做,如果它只是枚举案例的精确大写版本。 如果他们不一样,我会按照大卫的回答去做

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"