Avatar
ですね
4:56 AM
だから、エンコーダーは、型の定義がBaseの型ならBaseとしてしかエンコードしてはいけないはず。 (edited)
4:58 AM
public protocol Encodable { /// Encodes `self` into the given encoder. /// /// If `self` fails to encode anything, `encoder` will encode an empty keyed container in its place. /// /// - parameter encoder: The encoder to write data to. /// - throws: An error if any values are invalid for `encoder`'s format. func encode(to encoder: Encoder) throws } この生え方だと、自身の宣言がBase型かConcrete型かの区別つかない気がする (edited)
5:01 AM
public protocol Encodable { /// Encodes `self` into the given encoder. /// /// If `self` fails to encode anything, `encoder` will encode an empty keyed container in its place. /// /// - parameter encoder: The encoder to write data to. /// - throws: An error if any values are invalid for `encoder`'s format. staitc func encode(to encoder: Encoder, instance: Self) throws // <- staticなら宣言されてる型から取れる } これなら整合性が取れるかな?
5:02 AM
それとも、実際にはBase.encode: (Base) -> (Encoder) throws -> () を使っていて問題なく動くのだろうか