2017-01-06 8 views
1

code running in xcodeサブクラスは、そのスーパークラスから型プロパティを継承できますか?もしそうなら、それを上書きする方法は?

「あなたは、サブクラスがスーパークラスの実装をオーバーライドできるようにする代わりに、classキーワードを使用することができますクラスタイプのための計算されたタイプのプロパティについては、」

「あなたはあなたを提供するために、継承されたインスタンスを上書きまたはプロパティを入力することができますそのプロパティの独自のカスタムゲッターとセッター」 ----アップルSwift3

//override static 
class A{ 
    var myValue = 0614 
    static var storedTypeProperty = "Some value" 
    class var overrideableComputedTypeProperty: Int { 
     return 1 
    } 
} 
class B: A { 
    storedTypeProperty = "New String" 
} 

そのBが0Vに、どのようにA. から任意の型のプロパティを継承していないように思えます上記のSwift3の本で述べたように、 "継承された型のプロパティ"を書き直してください。

+0

何を達成したいですか? 'static'プロパティをオーバーライドすることはできませんが、他の変数で行うこともできます。 – NSDmitry

+0

Swift3で述べたように、この2つの文章の意味を理解できません。継承された型プロパティをオーバーライドして、そのプロパティ用に独自のカスタムゲッターとセッターを提供できると説明しています。 – cary

答えて

0

あなたが直面する問題は、static変数を使用しているためです。 static変数を上書きすることはできません。ここで議論する必要はありません。あなたはclass A {}のように、あなたの代わりにstaticキーワードのclassキーワードを使用して、クラス型を上書きすることができ、class(ないstruct)を持っている場合

最初の文は、述べています。つまり、同じ目的のために2つのキーワードを使用することができます(大きな違いは、staticは上書きできません)。

class B: A { 
    // Class type computed property can be overwritten 
    override class var overridableClassPropery: String { 
     return "This is class B's overwritten property" 
    } 
} 

EDIT:

class A { 
    // overridable computed property 
    class var overridableClassPropery: String { 
     return "This is class A's overwritten property" 
    } 

    // Not overridable `static` computed property 
    // Error will be shown if you try to override this property in class `B` 
    static var notOverridableStaticPropery: String { 
     return "Can not override this property in a subclass" 
    } 
} 

もう一つは、あなたがスーパークラスのプロパティをオーバーライドし、次のように、サブクラスで独自のgetの実装を提供できることを、言いますnotOverridableStaticProperyclass Aclass Bによって継承されています。つまり、class Bからアクセスしたり呼び出すことができます。 BUTこれを上書きすることはできません。常にclass Aに設定された値になります。

print(A.notOverridableStaticPropery) // prints "This is class A's not overridable static property" 
print(B.notOverridableStaticPropery) // prints "This is class A's not overridable static property" 
+0

私は2番目の文で "継承された型のプロパティ"と言いましたので、BはAから型のプロパティ "notOverridableStaticProperty"を継承するはずですが、この型のプロパティを呼び出すことはできませんB、私は何を逃したのですか? – cary

+0

私の答えを編集しました。 – dirtydanee

+0

私の問題は解決しました。大変ありがとうございます – cary

関連する問題