Avatar
値型の variance 、どう考えたらいいのか難しいと思ってたけど、イミュータブルクラスに変換して、 mutating funcstatic メソッドに読み替えれば解釈できそう。 ↓ Array は covariant にできる class Array<out E> { func get(_ index: Int) -> E { ... } static func set<E>(_ this: Array<E>, _ index: Int, newValue: E) -> Array<E> { ... } } けど、 Fence は covariant にできない。 class Fence<T> { var animal: T? = nil } class Farm<out T> { let fence: Fence<T> = Fence<T>() // Fence が T について invariant なのでエラー }