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