【Swift】アクセス修飾子の種類と違いとは?fileprivate/open/internal
この記事からわかること
- Swiftのアクセス修飾子の使い方
- 種類と違い
- internal/public/open/private/fileprivate
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Swiftのアクセス修飾子とは?
他のプログラミング言語にもあるようにSwiftにもオブジェクトや変数、関数などのアクセスをコントロールするためのアクセス修飾子が用意されています。アクセスをコントロールできることにより、外部(他のクラスなど)に公開したくない情報をオブジェクト内に閉じ込めておけたり、特定の処理のみを外部から利用可能にするといったことが可能になります。
Swiftでアクセスを制御できるのはクラスや構造体、列挙型、プロパティ、メソッド、イニシャライザなどをとなっています。
モジュールとソースファイル
Swiftのアクセスコントロールはモジュールとソースファイル単位で管理されているようです。ここで言うモジュールとは各ビルドターゲットのことで、アプリやフレームワークのことを指しており、import
文を使用して別のモジュールをインポートすることが可能です。
ソースファイルは、モジュール内に作成したSwiftのソースコードファイルです。
アクセス修飾子の種類
Swiftではアクセスコントロールを行うために5種類のアクセスレベルが提供されています。
アクセスレベル | 概要 |
---|---|
open | どんなソースファイルからでもアクセス可能。クラスやクラスメンバーに制限され、継承やオーバーライドが可能。 |
public | どんなソースファイルからでもアクセス可能。 |
internal | 同一モジュール内でのみアクセス可能。Swiftのデフォルトアクセスレベル。 |
fileprivate | 同一ファイル内からのみアクセス可能。 |
private | 同一のクラス/構造体などからのみアクセス可能。 |
そしてこれらのアクセスレベルと指定するためにopen
、public
、internal
、fileprivate
、private
という修飾子が用意されています。
アクセス修飾子の使い方
5つのアクセス修飾子はクラスや構造体、プロパティやメソッドなどの宣言の前に付与して使用します。
public class Sample {
open var openProperty = "open"
public var publicProperty = "public"
var internalProperty = "internal"
fileprivate var filePrivateProperty = "fileprivate"
private var privateProperty = "private"
}
getとsetでアクセスレベルを分ける
プロパティのset
とget
でアクセスレベルを分けることも可能です。例えば読み取りはどこからでも可能だが、書き込みのみ制限をかけたい場合はprivate(set)
とすることで書き込みのみprivate
にすることが可能です。
class Sample {
private(set) var sample = 0
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。