プリプロセッサマクロは、SwiftUIの公式チュートリアル/ビデオでよく見られます。例:
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
それらは必要ですか?コンパイラーは、struct
が内部的に使用されていないことを確認し、struct
全体を省略できます。これは、アクセス修飾子が暗黙的にinternal
であるためです。 PreviewProvider
に準拠しているものはすべて削除できると思いますが、準拠しているすべてのオブジェクトがそうであるとは限りませんが、それを使用しない場合、なぜAppleはプリプロセッサマクロ?
それをリリースモードで実行して、コンパイルされたクラスを派生データフォルダーに配置しようとしましたが、それについて何も理解できません(.oファイル)。 未使用のコードを省略するためにマクロを本当に含める必要があるかどうか誰でも確認できます(ContentView_Previewsタイプは、コード内のどこにも使用されません) ?
11 GMシードから削除されたようです。GMシードリリースノートには、(解決済みの問題)とあります):
「PreviewProviderタイプを囲む#if /#endifコンパイラの条件はSwiftUIテンプレートから削除されました。PreviewProvidersはアーカイブ時にビルドされた製品から適切に削除されません。(51539802)」
これがプレビュープロバイダーが現在削除されていないのか、それとも問題が修正されて削除されているのかはわかりません。テンプレートコードが#ifを削除する場合、それはAppleがそれがもはや必要ではないと信じていることを意味します。
Xcode 11.2以降では#if DEBUGは必要ないため、次のようにして、PreviewProviderの周りの#if DEBUGを削除します。
struct ContentView: View {
var body: some View {
NavigationView {
List {
Text("First Row")
Text("First Row")
Text("First Row")
Text("First Row")
}.navigationBarTitle(Text("Dynamic List"))
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
[〜#〜]注[〜#〜]:明確にするために、しないでくださいプレビュープロバイダーを
#if DEBUG
条件でラップする必要があります。それらは本番ビルドから削除されます。
私は少し遅れましたが、混乱がウェブ全体に広がっていて、それがかなりコミカルであることが判明したので、私はこれを書き留めなければなりませんでした。リリースノートは「Resolved Issues」の下にあり、解決されたチケットのタイトルは「」でした。PreviewProvidersが適切に削除されていませんアーカイブ時にビルドされた製品。(51539802
) "。
うん、それは今すべてが理にかなっています。
Annnd後で変更した可能性がある場合に備えて.....詳細を確認してください
(私は徹底しています...多すぎるかもしれません)
削除する必要はありません。 DEBUGは、Your Target -> Build Settings -> Active compilation Conditions
に自動的に追加されるカスタムフラグです。このフラグは、デバッグ構成にのみ存在します。リリースビルドでは、このフラグのないリリース構成を使用します。
フラグが存在しない場合-コードは省略されます
詳細はこちら セクション「DEBUGプリプロセッサマクロ」