No entiendo el significado de este error. Esto es lo que estoy tratando de hacer:
protocol P { var testTitle: String? { get } } class MyViewController: UIViewController, P { var testTitle: String? { didSet { self.title = testTitle } } } final class TestViewController: MyViewController { var testTitle: String? { // Error occurs here return "Test" } }Y estoy recibiendo:
No se puede anular la propiedad mutable con la propiedad de solo lectura 'testTitle'
¿Podría ayudarme a entender lo que está pasando? Tal vez sea trivial para algunas personas, pero no para mí.
Gracias por tu ayuda.
No puede implementar una subclase para que sea más restrictiva que la clase base (solo funcionaría al revés). Entonces, si la clase base implementa una propiedad de lectura/escritura, no puede hacer que sea de solo lectura en su clase derivada.
Por lo tanto:
final class TestViewController: MyViewController { override var testTitle: String? { // No error occurs here get { return "Test" } set { super.testTitle = newValue } } }El protocolo requiere que la clase adoptante implemente una propiedad testTitle con un getter pero no prohíbe declarar la propiedad con un getter y un setter.
Para anular una propiedad, debe anular la firma (completa) en la clase, no el requisito del protocolo.
Como testTitle se declara como de lectura/escritura, no puede anularlo como de solo lectura.