3
當枚舉符合協議CustomStringConvertible時,是否可以從變量獲取枚舉描述?簡化的定義是:當枚舉符合協議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沒有孩子,所以我不能將這些情況彼此分開(當然除了開關櫃)。在目前的情況下,我可以擴展該枚舉的功能,但不能編輯以前完成的功能。
有沒有辦法得到這種情況下的一般字符串描述?
也許這是不是上面清楚,但要求是: 1的描述是傳統的財產,它是不可能改變它的邏輯 2.我需要得到類似於調試器描述的「字符串描述」。例如:「en.aaa1」「en.aaa2」「en.two((2.0,3.0))」等 當然,不用每種情況都使用開關:) –