【发布时间】:2019-08-27 05:16:28
【问题描述】:
最近,我发现了这个方便的小 sn-p 代码来获取枚举的字符串表示,即使存在关联值:
enum XXX {
case a
case b
case c(Int)
private var typeStr: String {
guard let label = Mirror(reflecting: self).children.first?.label else {
return .init(describing: self)
}
return label
}
}
这很聪明。反射也可以用来减少像这个 init 函数这样的样板文件吗?
init?(rawValue: String?)
{
guard let val = rawValue?.lowercased() else {
return nil
}
switch val {
case "a", "1a": self = .a
case "b", "1b": self = .b
case "c", "1c": self = .c(1)
default: return nil
}
}
【问题讨论】:
-
我认为 Mirror 无法做到这一点。
标签: ios swift xcode reflection enums