properties - Is there a way to override "property" setters and getters in Swift? -
after reading @property/@synthesize equivalent in swift, became curious how functionality objective c retained.
say have following in objective c:
@interface myclass @property (readwrite) mytype *myvar; @end
this can accessed such dot- , smalltalk-based syntaxes:
type *newvar1 = myclassinstance.myvar; type *newvar2 = [myclassinstance myvar]; myclassinstance.myvar = newvar1; [myclassinstance setmyvar: newvar2];
and if want add additional functionality getters/setters, can this:
@implementation myclass - (mytype *) myvar { // more stuff return self._myvar; } - (void) setmyvar: (mytype *) newvar { self._myvar = newvar; // more stuff } @end
(see custom setter @property?)
however, the accepted answer above linked question says swift doesn't differentiate between properties , instance variable. so, have following in swift:
class myclass { var myvar: mytype }
as far know, way access myvar
such:
var newvar1 = myclassinstance.myvar; myclassinstance.myvar = newvar1;
but don't know how customize these getters , setters. is there swift equivalent of objective c @property
overrides?
while researching question, happened upon answer, still figured should put here else same question.
yes, according the swift programming language documentation's page on properties, getters , setters can made in similar way how c# tackles problem:
class myclass { var myplainvar: mytype = mytype() var mycustomgettervar: mytype { // more stuff return self.mycustomgettervar } var mycustomgettersettervar: mytype { { // more stuff return self.mycustomgettersettervar } set { // stuff self.mycustomgettersettervar = newvalue // more stuff } } var mycustomfancyvar: mytype! { willset { // stuff newvalue } // actual setting done automatically, no set{} didset { // more stuff oldvalue } } }
note variables didset
must initialized or explicitly unwrapped (using !
), , cannot have get
reason.
Comments
Post a Comment