is
はどうしてfalseにチェックされていますか?Swift:サブクラスで基底クラスとスーパークラスをチェックする方法
class Person : BaseClass { ... }
class Parent : Person { ... }
.
.
let parent = Parent()
print("parent is BaseClass: \(parent.self is BaseClass)")
// this prints 'parent is BaseClass: false'
サブクラスの基本クラスまたはスーパークラスを確認するにはどうすればよいですか?特にオブジェクトがサブクラス化された深さがわからない場合
UPDATE: 私の間違い以下は真
print("parent is BaseClass: \(parent.self is BaseClass)")
// this prints 'parent is BaseClass: true'
である。しかしこの1つは遊び場で
class GenericClass<T: BaseClass> { }
.
let myGeneric = GenericClass<Parent>()
print("myGeneric is GenericClass<BaseClass>: \(myGeneric.self is GenericClass<BaseClass>)")
// this prints 'myGeneric is GenericClass<BaseClass>: false'
ではありません、私は次の警告取得しています:
Playground.playground : 'GenericClass'から に関連しない 'GenericClass'タイプが常に失敗する
したがって、基本クラスとの一般的な関係を確認するにはどうすればよいですか?
これはジェネリック医薬品の不適切な使用のように感じます。あなたが解決しようとしている問題は何ですか? –
それは簡単です。私はGenericClassとそのすべてのサブクラスで何かをする必要があります。実行時に私は管理できるオブジェクトのクラスを知らない。だから私はそれが正しいものをすることができるようにするためにそれをチェックする必要があります。 Swiftは一般的な継承をチェックすることができないので、私には聞こえます。コンパイル時にも問題ありません。私は、 'is'演算子を拡張するアイデアをもたらします。 –
Dareon
'GenericClass'のサブクラスを教えてもらえますか?あなたの事例には何もありません。 –