Przeprowadzałem badania na temat powodów, dla których powinniśmy używać Get i Set dla naszych właściwości.Getters and Setters w Swift - Czy zamiast tego warto używać WillSet i DidSet?
Zauważyłem 3 główne powody, dla których to
- Kiedy chcesz zrobić/coś sprawdzić zanim faktycznie ustawić właściwość
- Kiedy chcesz mieć właściwości, które można uzyskać tylko od to (może dla celów bezpieczeństwa, jak sądzę?), lub dać mu różne poziomy dostępu .
- Ukrywanie wewnętrznej reprezentacji właściwości podczas prezentowania właściwości przy użyciu alternatywnej reprezentacji. (Co dla mnie nie uczynić wiele sensu, ponieważ nie mogę do niego dostęp na niewłaściwym miejscu, używając funkcję Set Anyways)
Poniższy kod jest przykładem tego, jak można zaimplementować get i set dla właściwości w Swift, korzystając z tych 3 punktach wspominałem:
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
}
}
ale ten drugi przykład poniżej również skorzystać z tych wymienionych punktów, ale zamiast używać inną nieruchomość komputerowej powrót prywatny wartość nieruchomości po prostu używać willSet i didSet obserwatorzy
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
}
}
Więc jestem ciekawy, jakie są ZALETY i WADY KAŻDEGO wykonania.
góry dzięki
Bardzo interesujące pytanie, ale nie mogę ci pomóc, odkąd tłum został odkryty. .. –
willSet i didSet są ** obserwatorami **. Są całkowicie różne od podmiotów pobierających/ustawiających. (Nawet nie wspominając, że często właściwości w Swift (takie jak w rozszerzeniu protokołu) nie są nawet właściwościami, są obliczonymi właściwościami.) W odpowiedzi na twoje pytanie, tak, z całą pewnością dwaj obserwatorzy są tak wspaniałymi cechami językowymi , że bardzo często zwykłe ** nie musisz się martwić ** o używanie żmudnego wzoru własności/gettera/settera - świetnie. – Fattie