我正在研究我们应该为我们的属性使用 Get 和 Set 的原因。
我注意到了 3 个主要原因
- 当您想在实际设置属性之前做/检查某些事情时
- 当您想拥有一个只能从中获取的属性时(我猜可能是出于安全目的?),或者给它不同的访问级别。
- 隐藏属性的内部表示,同时使用替代表示公开属性。(这对我来说没有多大意义,因为无论如何我都可以使用 Set 函数在错误的地方访问它)
下面的代码是一个示例,说明如何利用我提到的这 3 点在 Swift 中为属性实现 Get 和 Set:
class Test
{
private var _testSet:String!
private var _testGetOnly:String
var testSet:String{
get{
return _testSet
}
set{
_testSet = newValue + "you forgot this string"
}
}
var testGetOnly:String!{
get{
return _testGetOnly
}
}
init(testSet:String, testGetOnly:String)
{
_testSet = testSet
_testGetOnly = testGetOnly
}
}
但是下面的另一个示例也利用了提到的那些点,但我没有使用另一个计算属性来返回私有属性值,而是使用 willSet 和 didSet 观察者
class Test
{
var testGet:String {
willSet{
fatalError("Operation not allowed")
}
}
var testWillSet:String!{
didSet{
self.testWillSet = self.testWillSet + "you forgot this string"
}
}
init(testGet:String, testWillSet:String)
{
self.testGet = testGet
self.testWillSet = testWillSet
}
}
所以我很想知道每种实现的优点和缺点是什么。
提前致谢