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


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

Ich erhalte eine Fehlermeldung:Wie kann ich diese Swift-Eigenschaft überschreiben?

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

+0

Sie können einfach nicht eine Lese-Schreib-Eigenschaft mit einer schreibgeschützten Eigenschaft überschreiben. Eine Schlüsselregel von OOP besteht darin, dass Sie immer eine Unterklasse an alles übergeben können, was ihre Oberklasse erwartet. Zu der Sache, die die Oberklasse erwartet, ist Ihre Eigenschaft lesen-schreiben - aber es ist nicht, wenn Sie in der Unterklasse übergeben. Beachten Sie, dass das umgekehrte Beispiel (das Überschreiben einer schreibgeschützten Eigenschaft mit einer Lese-/Schreibeigenschaft) funktionieren würde (obwohl Ihre Lese-/Schreibeigenschaft eine berechnete sein müsste, da Sie keinen Speicher in einer Datei einfügen können) überschreiben). – Hamish

Antwort

2

wie diese versuchen:

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

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

Andere Fehler als auch kommt:

cannot override mutable property with read-only property

Sie müssen also beide zur Verfügung zu stellen Getter und Setter:

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


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

     } 
    } 
-1

Die zwei verschiedenen Deklarationen von rightButtonColor haben unterschiedliche Typen. Es kompiliert sauber, wenn Sie sicherstellen, dass sie vom gleichen Typ sind:

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

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