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"