我正在研究协议以及如何遵守它们。
protocol Human {
var height: Int { get set }
}
struct Boy: Human {
var height: Int { return 5 } // error!
}
我正在尝试学习实现 set 和 get 的不同方法。
然而上面的代码会抛出以下错误:
类型“男孩”不符合协议“人类”
但是像下面这样写不会有任何错误:
struct Boy: Human {
var height = 5 // no error
}
我不明白其中的区别,也不明白当你也可以时到底需要实现什么set一个变量。我研究了不同的问题和教程,但它们都只是写下来,没有任何更深入的解释。
EDIT:确保你看到伊马努的回答here https://stackoverflow.com/a/38281420/5175709。它极大地解释了不同的场景。
来自斯威夫特参考 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html:
财产要求
...
该协议没有指定属性应该是存储属性还是计算属性 - 它只指定所需的属性名称和类型。
...
属性要求始终声明为变量属性,前缀为var
关键词。可获取和可设置的属性通过书写来表示{ get set }
在类型声明之后,可获取的属性通过书写来指示{ get }
.
在你的情况下
var height: Int {return 5} // error!
is a 计算属性这只能是get,它是一个
的快捷方式
var height: Int {
get {
return 5
}
}
But the Human
协议需要一个可获取和可设置的属性。
您可以遵循存储的variable属性(正如您所注意到的):
struct Boy: Human {
var height = 5
}
或具有计算属性getter 和 setter:
struct Boy: Human {
var height: Int {
get {
return 5
}
set(newValue) {
// ... do whatever is appropriate ...
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)