【发布时间】:2019-09-08 06:23:57
【问题描述】:
我正在尝试为协议中的变量提供默认值。我收到一个错误:
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 可以使用默认值(在协议扩展中)而不声明它?
【问题讨论】:
-
扩展没有为协议声明中的值实现
set方法 - 实现这个(或删除set功能)会解决问题吗? -
我希望能够设置值(覆盖默认值)。
set会是什么样子? -
这取决于您希望默认
set做什么。默认的get返回 0.3,所以默认的set应该覆盖它(在这种情况下,最好只使用变量实现)还是应该忽略它? -
是的,我希望该选项能够覆盖默认值。谢谢。
-
然后参考这个答案以了解一些解决方法(stackoverflow.com/a/38885813/8903497)。您不能将属性存储在协议(或协议扩展)中,因此您必须找到另一种方法。