はじめに
コードを書く際にあまり意識していなかったのと、理解が曖昧だったので備忘録として投稿します。
アクセス修飾子とは?
アクセス修飾子とは、クラスや関数等にアクセス制限を設けるために利用します。
internal
- 同じモジュール内であればアクセスすることができる。
モジュールとは
モジュールとはimportして読み込んで利用するFrameworkを作成するための仕組み。
private
- 一番制約の厳しいアクセス修飾子。
- 同じファイル内からのアクセスのみ許可されている。
- クラス単位ではなく、ファイル単位のアクセス制御であることに注意がいる。( Swift4から
extensionでprivateプロパティにアクセスできるようになった。)
fileprivate
- 同じファイル内からのアクセスのみ許可されている。
public
- 別のモジュールからでもアクセスできる。
- 継承やオーバーライドが不可能
open
- 別のモジュールからでもアクセスできる。
- 継承やオーバーライドが可能
アクセス修飾子の使い分け
アクセスレベルを特に意識しない場合
- 何もつけない or
internal
アクセスレベルを意識する場合
-
public・・・別のモジュールからも使えるようにしたい -
open・・・別のモジュールからも使えて、継承やオーバーライドさせたい。 -
private・・・実装を他からは隠したい。 -
fileprivate・・・実装を他からは隠したいが、特定のコード間では共有したい。
補足
fileprivateを使うよりprivateにして、共有したいコードを同じソースファイルにextensionを使ってまとめるほうがいい。