2016-05-24 4 views
3
class Base: UIViewController { 
    var rightButtonColor: UIColor = UIColor.blueColor() 
} 


class SecondViewController: Base {  
    override var rightButtonColor: UIColor { 
     return UIColor.redColor() 
    } 
} 

は、私はエラーを取得しています:このSwiftプロパティをどのように無効にすることができますか?

Getter for 'rightButtonColor' with Objective-C selector 'rightButtonColor' conflicts with getter for 'rightButtonColor' from superclass 'Base' with the same Objective-C selector

+0

読み取り専用プロパティで読み書き可能なプロパティを上書きすることはできません。 OOPの重要なルールは、スーパークラスを期待するものすべてに常にサブクラスを渡すことができることです。スーパークラスを期待するものに対しては、プロパティは読み書き可能ですが、サブクラスを渡すとそうではありません。この例を元に戻した場合(読み書き可能なプロパティを読み書き可能なプロパティで上書きしようとすると)、読み書き可能なプロパティは計算されたものでなければならないが、オーバーライド)。 – Hamish

答えて

2

このようにしてみてください。

class Base: UIViewController { 
    var rightButtonColor: UIColor { 
     return UIColor.blueColor() 
    } 
} 

class SecondViewController: Base { 
    override var rightButtonColor: UIColor { 
     return UIColor.redColor() 
    } 
} 
-1

他のエラーも同様にアップしています:

cannot override mutable property with read-only property

ですから、両方を提供する必要がありますゲッターとセッター:

class Base: UIViewController { 
     var rightButtonColor: UIColor = UIColor.blueColor() 
    } 


    class SecondViewController: Base { 
     override var rightButtonColor: UIColor { 
      get { 
       return UIColor.redColor() 
      } 
      set { 
       self.rightButtonColor = newValue 
      } 

     } 
    } 
-1

rightButtonColorの2つの異なる宣言には、異なるタイプがあります。

class Base: UIViewController { 
    var rightButtonColor: UIColor { 
     return UIColor.blueColor() 
    } 
} 

class SecondViewController: Base { 
    override var rightButtonColor: UIColor { 
     return UIColor.redColor() 
    } 
} 
関連する問題