[解決済み] Swift3でfileprivateとprivateを区別する良い例は何ですか?
質問
これは
記事
の新しいアクセス指定子を理解する上で役に立ちました。
Swift 3
. のさまざまな使い方の例も示しています。
fileprivate
と
private
.
私の疑問は
fileprivate
を使うことは、このファイルの中だけで使われる関数に対して
private
?
どのように解決するのですか?
fileprivate
は今何ですか
private
であったものが
は以前のSwiftのリリースで使われていたものです。
同じソースファイルからアクセスできます。としてマークされた宣言は
private
としてマークされた宣言は、それが宣言されているレキシカルスコープ内でのみアクセスできるようになりました。
そのため
private
よりも制限されます。
fileprivate
.
現在 Swift 4, 型の中の private 宣言は、拡張子が同じソースファイルで定義されている場合、同じ型の拡張子にアクセス可能です。
例(すべて1つのソースファイル内)。
class A {
private func foo() {}
fileprivate func bar() {}
func baz() {
foo()
bar()
}
}
extension A {
func test() {
foo() // Swift 3: error: use of unresolved identifier 'foo'
// Swift 4: no error because extension is in same source file
bar()
}
}
let a = A()
a.foo() // error: 'foo' is inaccessible due to 'private' protection level
a.bar()
-
プライベート
foo
メソッドのスコープ内でのみアクセス可能です。 そのclass A { ... }
の定義の範囲内でのみアクセス可能です。それは、型の拡張からアクセスすることさえできません。 型への拡張機能からアクセスすることさえできません (Swift 3 では、Swift 4 での変更点については以下の 2 番目のメモを参照してください)。 の変更点を参照してください)。 -
ファイルプライベートの
bar
メソッドは、同じソースファイルからアクセスできます。
ノート
-
提案内容 SE-0159 - プライベートアクセスレベルの修正 は、Swift 4 で Swift 2 のセマンティクスに戻すことを提案しました。swift-evolution メーリングリストでの長くて論争的な議論の後、この提案は に却下されました。 .
-
提案の内容 SE-0169 - プライベート宣言と拡張機能の相互作用の改善 は
private
の宣言は、同じ型の拡張機能からアクセスできるようにすることを提案します。 で定義されている場合、その拡張子は で定義されている場合、同じ型の拡張子にアクセスできます。 この提案は受け入れられ、Swift 4で実装されました。
関連
-
[解決済み] swiftにおけるconvenience initとinitの違いは何ですか、より良い明示的な例
-
[解決済み] Swift 3、Swift 4、それ以降で dispatch_sync, dispatch_async, dispatch_after などはどうすればいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] Swiftでdispatch_onceのシングルトンモデルを使う
-
[解決済み】なぜ、Swiftの文字列では、?のような絵文字が奇妙に扱われるのですか?
-
[解決済み】UIViewControllerの最上位機種を取得する。
-
[解決済み] 非同期ネットワークリクエストのswift forループの実行が終了するまで待つ
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] このコンテキストで型検索を行う場合、「メソッド」は曖昧である、Alamofireのエラー
-
[解決済み] Swiftで文字列が別の文字列を含んでいるかどうかを確認するには?
-
[解決済み] Swift: print() vs println() vs NSLog()
-
[解決済み] SwiftでString.Indexはどのように動作するのか
-
[解決済み] Swiftベースのアプリケーションは、OS X 10.9/iOS 7以下でも動作しますか?
-
[解決済み】SwiftでFloatをIntに変換する。
-
[解決済み】Swiftで弱参照の配列を宣言するには?
-
[解決済み】Xcode 8 Beta 3 Legacy Swiftを使用する問題
-
[解決済み】Swiftの`let`と`var`の違いは何ですか?
-
[解決済み] Swift言語でのエラーハンドリング