Я занимался исследованием причин, по которым мы должны использовать Get и Set для наших свойств.
Я заметил 3 основные причины этого
- Когда вы хотите что-то сделать/проверить, прежде чем установить свойство
- Когда вы хотите иметь свойство, которое вы можете получить только от него (может быть, в целях безопасности, я думаю?), или предоставить ему разные уровни доступа.
- Скрытие внутреннего представления свойства при отображении свойства с использованием альтернативного представления. (что для меня не имеет большого смысла, так как я все равно могу получить к нему доступ не в том месте, используя функцию Set)
Приведенный ниже код является примером того, как вы могли бы реализовать Get и Set для свойств в Swift, используя в своих интересах те 3 пункта, которые я упомянул:
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
}
}
Поэтому мне любопытно узнать, каковы ПРЕИМУЩЕСТВА и НЕДОСТАТКИ каждой реализации.
заранее спасибо