当enum符合协议CustomStringConvertible时,是否可以从变量获取枚举描述?简化的定义是:
enum myEnum: CustomStringConvertible {
case one(p1: Int)
case two(p: CGPoint)
case aaa1
case aaa2
var description: String {
return "useless text"
}
}
没有协议就很容易:
let testCases = [en.one(p1: 10), en.two(p: CGPoint(x: 2, y: 3)), en.aaa1, en.aaa2]
testCases.forEach{
print( String(reflecting: $0 ), terminator: "\t\t" )
}
=> "en.one(10) en.two((2.0, 3.0)) en.aaa1 en.aaa2"
但是通过协议,我只能得到前两个案例
testCases.forEach{
Mirror(reflecting: $0).children.forEach{ label, value in
print( label == nil ? value : (label!, value))
}
}
=> ("one", 10), ("two", (2.0, 3.0))
因此,案例.aaa1,.aaa2没有孩子,所以我不能将这些案件彼此分开(当然除了案例)。在目前的情况下,我可以扩展该枚举的功能,但不能编辑之前完成的操作。
有没有办法获得这种情况的一般字符串描述?
答案 0 :(得分:1)
是的,您可以使用Swift的Mirror反射API。实例的枚举案例被列为镜像的子项,您可以打印其标签和值,如下所示:
function Save () {
try {
var req = {
DeliveryCode: value,
}
$.ajax({
url: URL,
type: 'POST',
data: req,
dataType: "json",
async: true,
success: function (result) {
resetLoadWaiting()
},
error: function (e) {
}
});
}
catch (e) {
}
}