Я изучал причины, по которым мы должны использовать Get и Set для наших свойств.Getters and Setters in Swift - Имеет ли смысл использовать WillSet и DidSet вместо этого?
Я заметил 3 основные причины, по которым он
- Если вы хотите сделать/проверить что-то перед вами на самом деле установить свойство
- Если вы хотите, чтобы иметь свойство, которое вы можете получить только от это (возможно, в целях безопасности, я предполагаю?), или дать ему различный доступ уровней.
- Скрытие внутреннего представления свойства при экспонировании объекта с использованием альтернативного представления. (Что для меня не сделать много смысла, так как я могу получить доступ к нему на неправильном месте, используя функцию 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
}
}
Так что мне любопытно узнать, КАКИЕ ПРЕИМУЩЕСТВА И НЕБЛАГОПРИЯТЫ каждой реализации.
Заранее спасибо
Очень интересный вопрос, но я не могу помочь вам с тех пор, как была обнаружена толпа. .. –
willSet и сделалSet - ** наблюдатели **. Они полностью отличаются от геттеров/сеттеров. (Даже не упоминайте, что часто свойства в Swift (например, в расширении протокола) не являются даже свойствами, они являются вычисленными свойствами.) В ответ на ваш вопрос, да, безусловно, эти два наблюдателя являются такими замечательными языковыми функциями , что очень часто вы просто ** не должны беспокоиться об использовании утомительного свойства/шаблона getter/setter больше - отлично. – Fattie