なえT備忘録

何の参考にもならないかもしれませんが、いつかは参考になるようにします

Swift アクセス修飾子について

これも人のコードを読んでる時に出てくるので、良い加減意味をおぼえないといけない。

 

 

swift.tecc0.com

 

とりあえず上記サイトを見ればわかる。けど念の為Swift実践入門も参照。

 

open:

モジュール内外のすべてのアクセスを許可

public:

モジュール内外のすべてのアクセスを許可、ただしモジュール外ではクラスの継承、オーバーライドが不可

internal:

同一モジュール(プロジェクト)内のアクセスのみ許可 (デフォルト値)

fileprivate:

同一ソースファイルないのアクセスのみ許可

private:

対象の要素が属しているスコープ内のアクセスのみ許可

 

こうみると、モジュールの定義をちゃんと分かってなかったので、確認する。※スコープは前の記事でかいたはず

 

モジュール:

複数のソースコードを含む配布可能なプログラムの単位。他のプログラムにインポート可能。詳しく調べていないが、.swiftファイル上にPackageDesctription というフレームワークをインポートし、モジュール化したい対象を選択すれば、以後外部のプロジェクトでも対象(クラス)が呼出可能となる。

 

⇨つまり、2つ以上の連続したプログラム作成を想定しない限り、モジュールに関するアクセス可否を検討する必要はない。(internal, fileprivate, privateのみでOK)

ほか3つについては、internal: 同一プロジェクト内、fileprivate: 同一swiftファイル内、private:同一スコープ内(クロージャやグローバルスコープ内)でのみ呼び出し可能、と考えればOK

 

open, publicは、会社や個人開発でチャットアプリを作成した⇨チャット機能を別アプリ(マッチングアプリ)のチャット欄に流用したい...みたいな感じで使うことになるのだろう。実際毎回あんなの書いてられんわ!という気持ちもわかる。

また、外部利用についても継承、オーバーライド可否をしっかり分けてるところ、変にいじってバグ起こすな、というAppleの強い品質管理意識を感じる。型指定やNilの処理に異常に厳しいのも、Appleの性格がでてるなぁと思いながらSwiftの勉強をしているのである。

 

良くも悪くも厳しいおかげで、ソフトの品質もいいんだろうなあ。(ちなみにAppleがハードの製造元に要求する品質管理レベルはガチでイカれているが、それは別のお話)

 

www.youtube.com