日記
相変わらず米を炊いていない.
今日書いたコードと感想
こういう場合でも複数のextensionで同じプロトコルに準拠することはできない.
protocol Serializable { func serialize() -> Any } extension Array: Serializable where Element == Int { func serialize() -> Any {} } // Conflicting conformance of 'Array<Element>' to protocol 'Serializable'; there cannot be more than one conformance, even with different conditional bounds extension Array: Serializable where Element == String { func serialize() -> Any {} }
その場合は次のようにしろと書いてあった.
protocol SerializableInArray {} extension Int: SerializableInArray {} extension String: SerializableInArray {} extension Array: Serializable where Element: SerializableInArray { func serialize() -> Any {} }
こうするとたしかにArray<Int>
とArray<String>
のインスタンスに対してのみserialize()
を呼べるようになるが,Array<Int>
とArray<String>
のserialize()
の実装だけを書くということもしたかったはずで,それはどうすればいいんですか.
print([1, 2, 3].serialize()) print(["a", "b", "c"].serialize()) print([1.0, 2.0, 3.0].serialize()) // Referencing instance method 'serialize()' on 'Array' requires that 'Double' conform to 'SerializableInArray'