In Swift, what is the conventional way to define the common pattern where a property is to be externally readonly, but modifiable internally by the class (and subclasses) that own it.
In Objective-C, there are the following options:
In Java the convention is:
What is the idiom for Swift?
Given a class property, you can specify a different access level by prefixing the property declaration with the access modifier followed by get
or set
between parenthesis. For example, a class property with a public getter and a private setter will be declared as:
private(set) public var readonlyProperty: Int
Suggested reading: Getters and Setters
Martin's considerations about accessibility level are still valid - i.e. there's no protected
modifier, internal
restricts access to the module only, private
to the current file only, and public
with no restrictions.
2 new access modifiers, fileprivate
and open
have been added to the language, while private
and public
have been slightly modified:
open
applies to class and class members only: it's used to allow a class to be subclassed or a member to be overridden outside of the module where they are defined. public
instead makes the class or the member publicly accessible, but not inheritable or overridable
private
now makes a member visible and accessible from the enclosing declaration only, whereas fileprivate
to the entire file where it is contained
More details here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With