Как я могу гарантировать, что некоторые косвенные случаи моего перечисления запрещены?
Например, вот мой тип:
enum PerkCard : Hashable {
case add(Int)
case mult(Int)
indirect case roll(PerkCard)
}
Я могу создавать экземпляры случаев, но некоторые должны не допускается (у вас не может быть рулонных карточек)
let c1 = PerkCard.add(1)
let c2 = PerkCard.roll(.add(1))
let c3 = PerkCard.roll(.roll(.add(1))) // Forbidden
Я не вижу способа предотвратить это при создании. Это просто возможно?
Заранее спасибо.
PS: Я знаю, что могу добавить метод check
, который бы справился с этой задачей, но это не вопрос .
PPS: Я также знаю, что могу разработать этот пример с таким типом struct
struct PerkCard : Hashable {
let value : Int
let kind : Kind
let roll : Bool
enum Kind {
case add, mult
}
}
Но это не главное.