enum
vs protocol
をやっていきたいと思います。 protocol A {} class B: A{} class C: A{}
vs enum A { case b(B) case c(C) }
seald
がないので、protocol
を利用した上の例では、予想しないような実装(クラス・構造体)が作られる恐れがあり、またパターンマッチで網羅性を検査することができません。enum
がいいのか、という議論になるかというとそうではなくて、(勘違いだったら申し訳ないんですが)Swiftのenum
の各タグ(?、たとえば上記の例でいうa
とかb
)はたしか型パラメーターが取れないです。protocol
をつかって次のようにやるしかない、といった感じになるんじゃないでしょうか。 public protocol HList { } public struct HNil: HList { init() { } } public struct HCons<H, T: HList>: HList { public let head: H public let tail: T public init(_ h: H, _ t: T) { self.head = h self.tail = t } }
HNil
とHCons
がありますが、HCons
が型パラを取るので、こうしています。