2016-06-26 3 views
0

計算された変数は、settergetterの両方で使用できます。私は次のコードを試してこの結論を得ました。私は100%正しいとは思わない。私が間違っているなら、私を修正してください。ありがとう!計算された変数は、setterとgetterの両方でスーパークラスの格納されたプロパティをオーバーライドするためにのみ使用できます。

class SuperClass { 
    var ID = 2202 
} 

//Wrong 
class SubClass: SuperClass { 
    override var ID = 2203 
} 

//worng 
class SubClass: SuperClass { 
    override var ID: Int { 
     return super.ID + 1 
    } 
} 

//Correct 
class SubClass: SuperClass { 
    override var ID: Int { 
     get { 
      return super.ID + 1 
     } 
     set { 

     } 
    } 
} 
+1

あなたのスーパークラスは、それのオブジェクトが_mutable_プロパティ 'ID'が含まれていることを述べています。 suberclassオブジェクトはサブクラスオブジェクトと互換性があるので、サブクラスオブジェクトは_mutable_であるプロパティIDを含んでいなければなりません(上記の例のように "ダミー"セッターを使用しても実際には値を変更しません)。これは、サブクラスオブジェクトを例えばに渡そうとすると明らかです。 'func foo(bar:SuperClass){bar.ID = 42}';サブクラスがゲッターだけで 'ID'をオーバーライドすることが許されるならば、そのようなオブジェクトで' foo(...) 'を呼び出すことはあまり意味がありません。 – dfri

+1

...次のQ&Aも参照してください。s:[Swiftのストアドプロパティをオーバーライドする](http://stackoverflow.com/questions/26691935/overriding-a-stored-property-in-swift)、[superclassプロパティをオーバーライドするSwiftの異なるタイプで](http://stackoverflow.com/questions/24094158/overriding-superclass-property-with-different-type-in​​-swift) – dfri

答えて

1

あなたはスーパークラスの保存されたプロパティをオーバーライドすることはできませんが、サブクラスからその値を変更することができます。

class SuperClass { 
    var ID = 2202 
} 

class SubClass: SuperClass { 
    override init() { 
     super.init() 
     self.ID = 2203 
    } 
} 

let a = SuperClass() 
let b = SubClass() 

print(a.ID) 
print(b.ID) 
関連する問題