我正在尝试为协议中的变量提供默认值。我收到一个错误:
Type ViewController does not conform to protocol Test
代码:
protocol Test {
var aValue: CGFloat { get set }
}
extension Test {
var aValue: CGFloat {
return 0.3
}
}
class ViewController: UIViewController, Test {
override func viewDidLoad() {
super.viewDidLoad()
print("value \(aValue)")
}
}
Run Code Online (Sandbox Code Playgroud)
如何提供默认值以便ViewController可以使用默认值(在协议扩展中)而无需声明它?
protocol Test {
var aValue: CGFloat { get set }
}
extension Test {
var aValue: CGFloat {
get {
return 0.3
}
set {
print("the new value is \(newValue)")
}
}
}
class Default: Test {
init() {
print("value \(aValue)")
}
}
class ViewController: Test {
var aValue: CGFloat {
get {
return 0.4
}
set {
print("i am overriding the setter")
}
}
init() {
print("value \(aValue)")
}
}
var d = Default() // value 0.3
d.aValue = 1 // the new value is 1.0
var vc = ViewController() // value 0.4
vc.aValue = 1 // i am overriding the setter
Run Code Online (Sandbox Code Playgroud)
由于您有一个协议扩展,如果您不想,您不必实现 getter 和 setter。
除了存储的属性之外,类、结构和枚举还可以定义计算属性,这些属性实际上并不存储值。相反,它们提供了一个 getter 和一个可选的 setter 来间接检索和设置其他属性和值。
您不能在 setter 本身中设置相同变量的值。
| 归档时间: |
|
| 查看次数: |
3661 次 |
| 最近记录: |