gpt4 book ai didi

swift - 如何从此枚举中获取 CustomStringConvertible 描述?

转载 作者:搜寻专家 更新时间:2023-10-30 23:04:33 24 4
gpt4 key购买 nike

我有以下枚举

enum Properties: CustomStringConvertible {
case binaryOperation(BinaryOperationProperties),
brackets(BracketsProperties),
chemicalElement(ChemicalElementProperties),
differential(DifferentialProperties),
function(FunctionProperties),
number(NumberProperties),
particle(ParticleProperties),
relation(RelationProperties),
stateSymbol(StateSymbolProperties),
symbol(SymbolProperties)
}

所有的结构都是这样的

struct BinaryOperationProperties: Decodable, CustomStringConvertible {
let operation: String
var description: String { return operation }
}

那么如何使该枚举符合 CustomStringConvertible?我尝试了一个简单的 getter,但显然它会调用自身,我想改为调用特定的结构。

奖励点:像这样定义的枚举有名称吗?

最佳答案

这样的枚举称为具有关联值的枚举

我将通过手动切换大小写来实现description:

extension Properties: CustomStringConvertible {
var description: String {
switch self {
case .binaryOperation(let props):
return "binaryOperation(\(props))"
case .brackets(let props):
return "brackets(\(props))"
...
}
}
}

编辑:另一种方法是使用 Swift 的 Mirror 反射 API。实例的枚举案例被列为镜像的子项,您可以像这样打印它的标签和值:

extension Properties: CustomStringConvertible {
var description: String {
let mirror = Mirror(reflecting: self)
var result = ""
for child in mirror.children {
if let label = child.label {
result += "\(label): \(child.value)"
} else {
result += "\(child.value)"
}
}
return result
}
}

(这是一个通用解决方案,应该可用于许多类型,而不仅仅是枚举。您可能必须为具有多个子级的类型添加一些换行符。)


编辑 2:Mirror 也是 printString(describing:) 用于不符合的类型自定义[调试]StringConvertibleYou can check out the source code here .

关于swift - 如何从此枚举中获取 CustomStringConvertible 描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46692567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com