needle
needle copied to clipboard
How to pass values in Views in SwiftUI
How you pass values from view to another view in needle? In your examples you use dependency ViewModel, but what if I need to pass some value to init ViewModel? How to do that?
Could you clarify your question with an example(s)?
struct AddressesView<ViewModel>: View where ViewModel: AddressesViewModelProtocol {
@ObservedObject var viewModel: ViewModel
var detailBuilder: AddressDetailBuilder
var body: some View {
NavigationView {
List(viewModel.addresses) { address in
NavigationLink(destination: detailBuilder.addressDetailView) {
AddressRow(address: address)
}
}
.navigationTitle("Address List")
}
}
}
Maybe it is meant like this.
How would you pass the selected address down the line here to AddressDetailView ?
Of course you can keep it somewhere globally or in shared instances, but for cases like this it seems to be a bit over the top.
So is there any way to pass values ?
Maybe like this ?
import NeedleFoundation
import SwiftUI
protocol AddressDetailDependency: Dependency {
var addressRepository: AddressRepository { get }
}
class AddressDetailComponent: Component<AddressDetailDependency>, AddressDetailBuilder {
func addressDetailViewModel(selectedId: UUID) -> AddressDetailViewModel {
AddressDetailViewModel(repository: dependency.addressRepository, selectedId: selectedId)
}
func addressDetailView(selectedId: UUID) -> AnyView {
AnyView(
AddressDetailView(viewModel: addressDetailViewModel(selectedId: selectedId))
)
}
}
protocol AddressDetailBuilder {
func addressDetailView(selectedId: UUID) -> AnyView
}