navigationDestination (navigationDestination)
در SwiftUI، «navigationDestination» مقصد تایپ شده را تعریف می کند. «تایپ شده» یعنی نوع داده مشخص است. سپس هر بار آن نوع را به مسیر هل بدهی، به ویوی درست می رسی. تمرکز ما «navigationDestination در SwiftUI» است.
مقصدهای تایپ شده
با «.navigationDestination(for:)» برای هر نوع مقصد می سازیم. بنابراین وقتی مقدار Int یا String را به مسیر بدهیم، به ویوی مناسب می رویم. این شبیه دفترچه مدرسه است؛ هر برگه برای درسی خاص.
- برای هر نوع، ویوی مقصد بساز.
- NavigationStack را با path وصل کن.
- در دکمه یا لینک، مقدار مناسب را push کن.
- برای هر نوع، navigationDestination تعیین کن.
import SwiftUI
struct NumberDetail: View {
let n: Int
var body: some View {
Text("Number: \(n)")
}
}
struct TextDetail: View {
let s: String
var body: some View {
Text("Text: \(s)")
}
}
struct DestinationTypedDemo: View {
@State private var intPath: [Int] = []
@State private var stringPath: [String] = []
var body: some View {
NavigationStack(path: $intPath) {
VStack(spacing: 12) {
Button("Push Int 7") {
intPath.append(7)
}
NavigationLink("Push Text 'Hi'", value: "Hi")
}
.navigationDestination(for: Int.self) { n in
NumberDetail(n: n)
}
.navigationDestination(for: String.self) { s in
TextDetail(s: s)
}
.navigationTitle("Typed Destinations")
}
}
}
struct ContentView: View {
var body: some View {
DestinationTypedDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
نکته: مقصدها را واضح نام گذاری کن. پیدا کردن خطا آسان تر می شود.
مسیریابی با enum
گاهی چند مدل مقصد داریم. بنابراین یک «enum» می سازیم. سپس با یک مقصد تایپ شده واحد، همه حالت ها را پوشش می دهیم. این مثل منوی بازی با مراحل مختلف است.
- enum با کیس های مختلف بساز.
- path را از نوع enum قرار بده.
- روی دکمه ها کیس مناسب را push کن.
- در destination سوییچ کن و ویو نشان بده.
import SwiftUI
enum Route: Hashable {
case number(Int)
case text(String)
}
struct DestinationMultiDemo: View {
@State private var path: [Route] = []
var body: some View {
NavigationStack(path: $path) {
VStack(spacing: 12) {
Button("Go to number 5") {
path.append(.number(5))
}
Button("Go to text 'Hello'") {
path.append(.text("Hello"))
}
}
.navigationDestination(for: Route.self) { r in
switch r {
case .number(let n):
Text("Number: \(n)")
case .text(let s):
Text("Text: \(s)")
}
}
.navigationTitle("Enum Destinations")
}
}
}
struct ContentView: View {
var body: some View {
DestinationMultiDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
ارتباط با بخش های دیگر
برای مسیردهی با کد سر بزن به Programmatic Nav. برای ابزارهای ناوبری هم Toolbar را ببین. همچنین این لینک تقویتی: navigationDestination در SwiftUI.
جمع بندی سریع
- هر نوع، مقصد مخصوص دارد.
- enum چند مسیر را یکپارچه می کند.
- path لیست صفحات فعال است.
- نام ها را کوتاه و شفاف نگه دار.