2016-05-24 5 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

Вы просто не можете переопределить свойство чтения-записи с использованием свойства только для чтения. Ключевым правилом ООП является то, что вы всегда можете передать подкласс всему, что ожидает его суперкласс. К тому, что ожидает суперкласс, ваше свойство - чтение-запись - но это не значит, что вы проходите в подклассе. Обратите внимание: если вы отмените этот пример (пытаясь переопределить свойство только для чтения с помощью свойства read-write), оно будет работать (хотя ваше свойство read-write должно быть рассчитано, поскольку вы не можете ввести хранилище в переопределить). – 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 имеют разные типы. Он легко компилируется, если вы уверены, что он такой же:

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

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