【Swift】アクセス修飾子の種類と違いとは?fileprivate/open/internal

この記事からわかること

  • Swiftアクセス修飾子使い方
  • 種類違い
  • internal/public/open/private/fileprivate

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

公式リファレンス:Access Control

Swiftのアクセス修飾子とは?

他のプログラミング言語にもあるようにSwiftにもオブジェクトや変数、関数などのアクセスをコントロールするためのアクセス修飾子が用意されています。アクセスをコントロールできることにより、外部(他のクラスなど)に公開したくない情報をオブジェクト内に閉じ込めておけたり、特定の処理のみを外部から利用可能にするといったことが可能になります。

Swiftでアクセスを制御できるのはクラスや構造体、列挙型、プロパティ、メソッド、イニシャライザなどをとなっています。

モジュールとソースファイル

Swiftのアクセスコントロールはモジュールとソースファイル単位で管理されているようです。ここで言うモジュールとは各ビルドターゲットのことで、アプリやフレームワークのことを指しており、import文を使用して別のモジュールをインポートすることが可能です。

ソースファイルは、モジュール内に作成したSwiftのソースコードファイルです。

アクセス修飾子の種類

Swiftではアクセスコントロールを行うために5種類のアクセスレベルが提供されています。

アクセスレベル 概要
open どんなソースファイルからでもアクセス可能。クラスやクラスメンバーに制限され、継承やオーバーライドが可能。
public どんなソースファイルからでもアクセス可能。
internal 同一モジュール内でのみアクセス可能。Swiftのデフォルトアクセスレベル。
fileprivate 同一ファイル内からのみアクセス可能。
private 同一のクラス/構造体などからのみアクセス可能。

そしてこれらのアクセスレベルと指定するためにopenpublicinternalfileprivateprivateという修飾子が用意されています。

アクセス修飾子の使い方

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でアクセスレベルを分ける

プロパティのsetgetアクセスレベルを分けることも可能です。例えば読み取りはどこからでも可能だが、書き込みのみ制限をかけたい場合はprivate(set)とすることで書き込みのみprivateにすることが可能です。

class Sample {
    private(set) var sample = 0
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index