I recently discovered Swift feature where setter for class and struct properties could be set to private while getter is internal or publicly accessed. This allows us to expose properties to the outside world without worrying if someone is going to change them in the future. I mostly do this to make dependencies of some type accessible.
The example below shows how could we use this in a class or a struct.
class Example {
// prop will have an internal access modifier
private(set) var prop: Type
// prop with public access modifier
public private(set) var prop: Type
}
prop
can be changed (set) only in the scope of the encapsulated struct or class but the outside world can only read it.
Setting a private setter only works with properties marked as var
and not let
because properties marked with let
are constants and by nature they are immutable.
This Swift feature could also be used in cases when we have a read-only property backed by another private property. Something like this:
class Example {
private var _prop: Type
var prop: Type {
get {
return _prop
}
}
}
// Using private(set) makes code more readable and reduces the complexity:
class Example {
private(set) var prop: Type
}
Top comments (0)