クラスとそのサブクラスのインスタンスを操作するときに、キャスト異常と思われるものが発生しています。どちらもクラスが準拠しているプロトコルとして型指定されています。Swiftのプロトコルタイプで異常をキャストする
私のドメインの特質に問題を複雑にしたくないので、私は以下に見える問題を示す人工的な例を示しました。
protocol P {
func canCast(_ p: P) -> Bool
}
extension P {
func canCast(_ p: P) -> Bool {
return p as? Self != nil
}
}
class X: P {}
class Y: X {}
let a: P = X()
let b: P = Y()
Y
がX
のサブクラスであるので、我々はX
にb
をキャストすることができるはずですが、我々はY
にa
をキャストすることはできないはずです。
、以下に示すように、これは、正常に動作します:私は、プロトコルで宣言さ.canCast()
メソッドを使用する場合
print(a as? Y != nil) // prints false
print(b as? X != nil) // prints true
はしかし、キャストの両方が成功したように表示されます。
print(b.canCast(a)) // prints true
print(a.canCast(b)) // prints true
私は何かが足りません?