Where is my getter/setter Swift?

a missing Objective-C piece

This question came to my mind while reading the new language Swift, a new programming language Apple introduced in WWDC 2014, back in my old Objective-C day there are times when I need to write a custom setter/getter for my @property.

It is very frustrating at first that I can’t do this anymore, then I ask myself what is the reason of using setter/getter and how I use it. Normally I use it when the change made on property affects other parts of the class and I usually write it this way.

- (void)setFoo:(NSString *)newValue
{
// some logic
_foo = newValue;
// the rest of the logic
}

It turns out in Swift I can still achieve this by implementing 2 new Property Observers willSet and didSet so I can put “some logic” in willSet and “the rest of the logic” in didSet. I got 2 hidden benefits from this.

  1. I can make sure my property is set properly.
  2. There is no way I can go wrong when using property. when I set or get those willSet/didSet always enforce except where it shouldn’t (initializer). This replicated behavior we all do in Objective-c, use _var in init and [self var] elsewhere.
willSet and didSet observers are not called when a property is first initialized. They are only called when the property’s value is set outside of an initialization context.
- Swift document

This is just a small example of how this new language syntax and restriction can reduce future runtime errors. The language is still young and surely needs improvements in many aspects, but I think it is worth trying if you are in doubt.