Code: Select all
.navigationDestination(item: self.$viewModel.selectedUserId) { selectedUserId in
ProfileView(viewModel: ProfileViewModel(userId: selectedUserId))
}
Code: Select all
import SwiftUI
struct User: Identifiable, Hashable {
let id: String
let name: String
}
class UsersListViewModel: ObservableObject {
@Published var selectedUserId: String?
let users = [
User(id: "1", name: "John"),
User(id: "2", name: "Jane"),
User(id: "3", name: "Bob")
]
}
class ProfileViewModel: ObservableObject {
@Published var userId: String
deinit {
print("❌ \(String(describing: type(of: self))) destroyed")
}
init(userId: String) {
print("✅ \(String(describing: type(of: self))) created")
self.userId = userId
}
}
struct ContentView: View {
@StateObject private var viewModel = UsersListViewModel()
var body: some View {
NavigationStack {
List(viewModel.users) { user in
Button(action: {
viewModel.selectedUserId = user.id
}) {
HStack {
Image(systemName: "person.circle")
.foregroundColor(.blue)
Text(user.name)
.foregroundColor(.primary)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
.font(.caption)
}
}
}
.navigationDestination(item: self.$viewModel.selectedUserId) { selectedUserId in
let _ = print("➡️ .navigationDestination trigger")
ProfileView(viewModel: ProfileViewModel(userId: selectedUserId))
}
}
}
}
struct ProfileView: View {
@StateObject private var viewModel: ProfileViewModel
init(viewModel: ProfileViewModel) {
self._viewModel = StateObject(wrappedValue: viewModel)
}
var body: some View {
Text("Profile: \(viewModel.userId)")
}
}