問題タブ [xcode12]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - SwiftUI NavigationLink - 「怠惰な」目的地? または、「ラベル」を重複してコーディングしないようにするにはどうすればよいですか?
(Xcode 12 ベータ版の macOS Big Sur で) SwiftUI で苦労していたことの 1 つは、たとえば、このビューでユーザーが入力したプレーヤー名に応じて構造体SetUpGameView
を作成する必要があるa からの移動であり、次にvia へGame
のナビゲーションに進みます。が nil のGameView
場合は無効にする必要がある、ボタンのような NavigationLink 。var game: Game?
ユーザーが必要なすべてのデータを入力するまで、ゲームを初期化することはできませんが、以下の例では、playerName: String
空でないことが必要です。
まともな解決策がありますが、複雑すぎるようです。
以下に複数の解決策を紹介しますが、どれも複雑すぎるようです。さらに簡単な解決策を考え出すのを手伝ってくれることを願っていました.
ゲーム構造
SetUpGameView
単純な (動作しない) 実装は次のとおりです。
ただし、アプリがクラッシュするため、これは機能しません。式が原因で、アプリがクラッシュしGameView(game: game!)
ますdestionation
。NavigationLink 初期化子が遅延評価されないため、game!
早期に評価され、最初は nil になるため、ラップを強制的に解除するとクラッシュが発生します。これは私にとって本当に紛らわしいです...それはただ...間違っているように感じます! 上記のナビゲーションが使用されるまで使用されず、この特定の初期化子を使用しても、NavigationLink がクリックされるまで目的地が使用されないためです。したがって、これをif let
、しかし今はもう少し複雑になります。ゲーム nil/非 nil の両方の状態で、無効/有効なレンダリングを除いて、NavigationLink ラベルを同じに見せたいです。これにより、コードの重複が発生します。または、少なくとも、以下に提示するものよりも優れた解決策を思いつきませんでした. 以下は、2 つの異なるソリューションと、2 つ目の改善された (カスタム ビューConditionalNavigationLink
ビューにリファクタリングされた) バージョンの 3 つ目です...
NavigatableIfModelPresent
と同じソリューションnavToGameSolution2
ですが、リファクタリングされているため、ラベルを繰り返したり、複数を構築したりする必要はありませんAnyView
...
ここに何かが欠けているように感じます...ゲームが非nilになったときに自動的にナビゲートしたくなく、NavigationLink
ゲームが非nilになるまで有効にしたくありません。
macos - macOS (SwiftUI) のサイドバーでのナビゲーションの問題
メイン ナビゲーションを配置するサイドバー付きのアプリがあります。サイドバーから移動すると、サイドバーの横に DetailView が表示されます。しかし、MainView から DetailView に移動したい場合、機能しません。ビューはオーバーレイとしてのみ表示されます。
サイドバーとメイン ビュー自体からメイン ウィンドウをナビゲートする方法はありますか?