我正在尝试为协议中的变量提供默认值。我收到一个错误:
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)")
}
}
如何提供默认值,以便ViewController
可以使用默认值(在协议扩展名中)而无需声明它?
答案 0 :(得分:0)
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
由于具有协议扩展,因此不需要,就不必实现getter或setter。
除了存储的属性,类,结构和 枚举可以定义计算属性,而实际上并不能 存储一个值。而是提供了一个getter和一个可选的setter 间接检索和设置其他属性和值。
您无法在设置器本身中设置相同变量的值。