Avatar
Farm が Generic なクラスを持ってたらだめってことでした。
なるほどー。↓値型のままだとわかりづらいので struct とイミュータブルクラスは等価だから書き変えて、 variance annotation ( out ) を付けて考えると Fenceanimal がコンパイルエラーですね。 setter が許容できない。 class Animal {} class Cow : Animal {} class Sheep : Animal {} class Fence<out T> { var animal: T? = nil // コンパイルエラー } class Farm<out T> { let fence: Fence<T> = Fence<T>() } func buySheep(farm: Farm<Animal>) { farm.fence.animal = Sheep() } let farm = Farm<Cow>() buySheep(farm: farm as Farm<Animal>)