Swiftで名前空間を使用するには?質問する

Swiftで名前空間を使用するには?質問する

ドキュメントではネストされた型についてのみ言及されていますが、それらを名前空間として使用できるかどうかは明確ではありません。名前空間について明示的に言及されているものは見つかりませんでした。

ベストアンサー1

Swift の名前空間は野心的なものだと私は言います。これは、現実の現実とは無関係に多くの宣伝がなされてきました。

例えば、WWDCのビデオでは、インポートするフレームワークにMyClassクラスがあり、コードにMyClassクラスがある場合、「名前マングリング」によって内部名が異なるため、それらの名前は競合しないと説明されています。しかし、実際には、する競合は、独自のコードの MyClass が優先され、「いやいや、フレームワーク内の MyClass を意味しています」と指定できないという意味で発生します。これはTheFramework.MyClass機能しません (コンパイラは意味を理解しますが、フレームワーク内にそのようなクラスが見つからないと表示されます)。

私の経験では、Swift は名前空間がまったくありません。アプリの 1 つを Objective-C から Swift に変換する際、組み込みフレームワークを作成しました。これは非常に簡単で便利な方法だったからです。ただし、フレームワークをインポートすると、フレームワーク内のすべての Swift の要素がインポートされます。つまり、名前空間は再び 1 つだけになり、グローバルになります。また、Swift ヘッダーがないため、名前を隠すことはできません。

編集:シード 3 では、この機能が次の意味でオンラインになり始めています。メイン コードに MyClass が含まれ、フレームワーク MyFramework に MyClass が含まれる場合、デフォルトでは前者が後者を上書きしますが、構文 を使用することでフレームワーク内のものにアクセスできますMyFramework.MyClass。したがって、実際には、明確な名前空間の基礎が整いました。

編集2:シード 4 では、アクセス制御ができるようになりました。さらに、私のアプリの 1 つに組み込みフレームワークがあり、予想どおり、すべてがデフォルトで非表示になっていたため、パブリック API のすべての部分を明示的に公開する必要がありました。これは大きな改善です。

おすすめ記事