[解決済み】Swiftにアクセス修飾語はあるのか?
2022-04-14 06:33:55
質問
Objective-Cでは、インスタンスデータは
public
,
protected
または
private
. 例えば、以下のようになります。
@interface Foo : NSObject
{
@public
int x;
@protected:
int y;
@private:
int z;
}
-(int) apple;
-(int) pear;
-(int) banana;
@end
Swiftのリファレンスにアクセス修飾子についての記載がないのですが。Swiftでデータの可視性を制限することは可能なのでしょうか?
どのように解決するのですか?
現在 Swift 3.0.1 があります。 4段階のアクセス権 以下、最高(最も制限の少ないもの)から最低(最も制限の多いもの)へと説明します。
1.
open
と
public
定義されたモジュール(ターゲット)の外側でエンティティを使用できるようにします。通常
open
または
public
フレームワークのパブリックインターフェイスを指定する際に、アクセスすることができます。
しかし
open
アクセスは、クラスとクラス・メンバにのみ適用されます。
とは異なり
public
アクセスは次のようになります。
-
public
クラスおよびクラスメンバは、定義モジュール(ターゲット)内でのみサブクラス化およびオーバーライドすることができます。 -
open
クラスとクラス・メンバーは、定義モジュール(ターゲット)の内側と外側の両方でサブクラス化およびオーバーライドすることができます。
// First.framework – A.swift
open class A {}
// First.framework – B.swift
public class B: A {} // ok
// Second.framework – C.swift
import First
internal class C: A {} // ok
// Second.framework – D.swift
import First
internal class D: B {} // error: B cannot be subclassed
2.
internal
定義されたモジュール(ターゲット)内でエンティティを使用できるようにする。通常
internal
アクセスは、アプリやフレームワークの内部構造を定義するときに使用します。
// First.framework – A.swift
internal struct A {}
// First.framework – B.swift
A() // ok
// Second.framework – C.swift
import First
A() // error: A is unavailable
3.
fileprivate
エンティティの使用をその定義されたソースファイルに制限します。通常
fileprivate
アクセスは、特定の機能の実装の詳細がファイル全体で使用されている場合に、その詳細を隠すために使用します。
// First.framework – A.swift
internal struct A {
fileprivate static let x: Int
}
A.x // ok
// First.framework – B.swift
A.x // error: x is not available
4.
private
あるエンティティの使用を、それを囲む宣言に限定する。通常
private
アクセスは、特定の機能の実装の詳細が単一の宣言の中でしか使用されない場合に、その詳細を隠すために使用します。
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン