FloraIT情報とか雑多な情報とか。この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。現在、iOSおよびmacOS向けネイティブアプリの開発ではObjective-CとSwiftがよく使われている。双方ともAPIレベルでの相互運用性が確保されており、コードを混在させることができるのは言うまでもない。一方で、細部レベルでは差異も見られ、アクセス修飾子とその扱いは大きく異なる。ここではObjevtive-CとSwiftのアクセス修飾子について記述をしたい。Objective-Cのアクセス修飾子インスタンス変数インスタンス変数は以下のいずれかに分かれる。他のコードからアクセス可能。通常は使うべきではない。定義されたクラスまたはそのサブクラスからアクセス可能。デフォルトのアクセス修飾子。定義されたクラスからのみアクセス可能。メソッド・プロパティーObjective-Cのメソッドおよびプロパティーではアクセス修飾子の概念がなく、すべてpublicとして扱われる。継承・オーバーライドも可能。一方で、ヘッダーファイルに宣言を記述しないことで擬似的にprivate扱いとすることは可能だが、意図せぬオーバーライドが発生する場合がある。クラスObjective-Cではクラスに対するアクセス修飾子の概念がなく、全てpublic扱いになる。ライブラリーやフレームワークではinclude対象に含めないことで擬似的に隠蔽することは可能だが、完全な隠蔽はできない。3ではクラス・プロパティー・メソッドに対してアクセス修飾子が使える。同一のクラススコープ内からのみアクセス可能。同一ファイルかつ同一クラスであってもextensionからのアクセス不可。同一のファイル内からアクセス可能。同一モジュールからアクセス可能。デフォルトのアクセス修飾子で、アプリ開発ではこれを使う。同一のモジュール及び他のモジュールからアクセス可能。他のモジュールでは継承・オーバーライド不可。ライブラリー・フレームワークでの開発で用いる。同一のモジュール及び他のモジュールからアクセス可能。他のモジュールでの継承・オーバーライドも可能。ライブラリー・フレームワークでの開発で用いる。2.xまではpublicだった。Objective-Cでのprotectedに相当するアクセス修飾子はない。最後に今回はObjective-CとSwiftのアクセス修飾子について説明を行なった。Swiftのアクセス修飾子はObjective-Cから考え方のレベルで変わっていることから、かなり戸惑うだろう。protectedに相当するものがなくなっている点で違和感を覚える人が多いものと考えられるだろう。いえ、これらの違いは実際の開発では気をつければ影響は抑えられるので、是非ともうまく使いこなしていきたいところである。Tomomiウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。再帰呼び出しが不要なら通常のループでここでは敢えてC/C++で触れているが、もしかしたら他の言語でもありえるかもしれない。4で言語仕様が固まってくれれば良いのだがこれ以上、Swiftのメジャーアップデートごとに破壊的な言語仕様の変更は勘弁して欲しいところである。