var placeholder: String = "" { didSet { self.placeHolderTextView.text = placeholder self.updatePlaceholderTextView() } } 报错:Cannot override mutable property 'placeholder' of type 'String?' with covariant type 'String',何解?
时间: 2023-11-22 21:56:19 浏览: 59
sapper-placeholder:使用 Sapper.js 开发的简单应用程序示例
这个错误是因为 `placeholder` 在父类中被定义为可变类型 `String?`,而在子类中你试图使用不可变类型 `String` 来覆盖它。这是不允许的,因为子类的属性必须与父类的属性具有相同的类型或者更具体的类型(即协变)。
要解决这个问题,你可以像下面这样在子类中使用可选字符串类型:
```
override var placeholder: String? {
get {
return super.placeholder
}
set {
super.placeholder = newValue
self.placeHolderTextView.text = newValue
self.updatePlaceholderTextView()
}
}
```
这里的 `placeholder` 属性类型是 `String?`,与父类中的属性类型相同,但是它是一个可选类型,这使得你可以将它设置为 `nil`。在属性的 `set` 方法中,你调用了父类的实现来设置属性的值,并更新了 `placeHolderTextView` 和 `updatePlaceholderTextView`。
阅读全文