Как я неправильно использую NavigationStack?
У меня есть этот крошечный образец кода при попытке использовать новый NavigationStack, но я получаю сообщение об ошибке: NavigationLink представляет значение типа «TransactionRoute», но нет соответствующего пункта назначения навигации, видимого из местоположения ссылки. Ссылка не может быть активирована.
Что я делаю не так?
import SwiftUI
struct TransactionRoute: Identifiable {
let id = UUID()
let realm: TransactionRealm
let transaction: String?
}
extension TransactionRoute: Equatable, Hashable {
static func == (lhs: TransactionRoute, rhs: TransactionRoute) -> Bool {
lhs.id == rhs.id
}
public func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
enum TransactionRealm: Int {
case basic
case upcoming
case recurring
}
struct ContentView: View {
@State var navigationPath = NavigationPath()
var body: some View {
NavigationStack(path: $navigationPath) {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
.padding(.bottom, 24)
.onTapGesture {
navigationPath.append(TransactionRoute(realm: .basic, transaction: nil))
}
Text("Hello, world!")
.onTapGesture {
navigationPath.append(TransactionRoute(realm: .upcoming, transaction: nil))
}
}
}
.navigationDestination(for: TransactionRoute.self) { route in
switch route.realm {
case .basic:
Text("Basic")
case .upcoming:
Text("Upcoming")
case .recurring:
Text("Recurring")
}
}
}
}
1 ответ
Как и большинство других модификаторов навигации (navigationTitle
,navigationBarTitleDisplayMode
),navigationDestination
входит в навигационный стек. Думайте об этом так, как будто NavigationStack получает информацию из своих фигурных скобок.
NavigationStack(path: $navigationPath) {
VStack {
/// ...
}
.navigationDestination(for: TransactionRoute.self) { route in
switch route.realm {
case .basic:
Text("Basic")
case .upcoming:
Text("Upcoming")
case .recurring:
Text("Recurring")
}
}
}