2017-10-05 25 views
3

Swift 4では、privateが同じソースコードファイルの内線でも表示されているので、fileprivateアクセス修飾子とはどのように違いますか?Swift 4のprivateとfileprivateの違いは何ですか?

背景: Swift 3では、クラス内のプライベート変数は、同じファイル内のその拡張子には表示されません。そのためには、fileprivateを使用しなければなりませんでした。

答えて

8

ファイルプライベート
ファイル・プライベートアクセスは、独自の定義のソースファイルへのエンティティの使用を制限します。これらの詳細がファイル全体で使用されている場合、特定の機能の実装の詳細を非表示にするには、ファイルプライベートアクセスを使用します。
構文:fileprivate <var type> <variable name>
例:fileprivate class SomeFilePrivateClass {}


プライベート
専用アクセスが囲んで宣言に、同じであること宣言の拡張にエンティティの使用を制限しますファイル。これらの詳細が単一の宣言内でのみ使用される場合、特定の機能の実装の詳細を非表示にするには、プライベートアクセスを使用します。
構文:private <var type> <variable name>
例:Swift - Access Levels

回答あなたの質問に: (スウィフト3では、プライベート変数でここprivate class SomePrivateClass {}


は、すべてのアクセスレベルの詳細ですクラスは同じファイルの拡張子には表示されません。そのためには、fileprivateを使用しなければなりません)

はい、Swift 4.0では、拡張機能では同じファイル内でプライベートにアクセスできるようになりました。ここでは延長 ViewController.swift

ファイル:あなたが/他のファイルに拡張子を定義する宣言する場合は、あなたのプライベート変数は、この画像では、あなたの拡張


ルックにアクセスすることはできません両方のビューコントローラが同じファイル内にある、従ってプライベート変数testPrivateAccessLevelは拡張

enter image description hereにアクセス可能です


ファイル:ので、プライベート変数testPrivateAccessLevel両方が別のファイルにある TestFile.swiftここ
延長とビューコントローラは、拡張子ではアクセスできません。ここで

enter image description here

enter image description here


クラスViewController2ViewControllerのサブクラスで、両方が同じファイルです。ここでプライベート変数testPrivateAccessLevelはサブクラスではアクセスできませんが、サブクラスではfileprivateにアクセスできます。

enter image description here

+0

これはプライベートのように見えますが、プライベートのファイルは現在互換的に使用できます。プライベートが使用できるが、ファイルプライベートではない、またはその逆の例を提供できますか? – crypt

+0

例をありがとう。私はあなたのことを理解しました。しかし、私の懸念は、上の例では、私はキーワードプライベートとfileprivateを交換する場合、出力は変更されません。 – crypt

+1

いいえ、拡張子を別のファイルに移動すると、fileprivateもアクセスできなくなります。 – crypt

関連する問題