fix: correct SwiftUI skill ViewModel injection and Equatable comparison

Fix ItemListView to accept viewModel via init with default parameter
so previews can inject mocks. Fix ExpensiveChartView Equatable to
compare full array instead of only count.
This commit is contained in:
Maksim Dimitrov
2026-02-17 17:04:31 +02:00
parent f5149d84ec
commit 9d8e4b5af8

View File

@@ -59,7 +59,11 @@ final class ItemListViewModel {
```swift
struct ItemListView: View {
@State private var viewModel = ItemListViewModel()
@State private var viewModel: ItemListViewModel
init(viewModel: ItemListViewModel = ItemListViewModel()) {
_viewModel = State(initialValue: viewModel)
}
var body: some View {
List(viewModel.items) { item in
@@ -215,10 +219,10 @@ For views with expensive bodies, conform to `Equatable` to skip unnecessary re-r
```swift
struct ExpensiveChartView: View, Equatable {
let dataPoints: [DataPoint]
let dataPoints: [DataPoint] // DataPoint must conform to Equatable
static func == (lhs: Self, rhs: Self) -> Bool {
lhs.dataPoints.count == rhs.dataPoints.count
lhs.dataPoints == rhs.dataPoints
}
var body: some View {
@@ -233,13 +237,11 @@ Use `#Preview` macro with inline mock data for fast iteration:
```swift
#Preview("Empty state") {
ItemListView()
.environment(ItemListViewModel(repository: EmptyMockRepository()))
ItemListView(viewModel: ItemListViewModel(repository: EmptyMockRepository()))
}
#Preview("Loaded") {
ItemListView()
.environment(ItemListViewModel(repository: PopulatedMockRepository()))
ItemListView(viewModel: ItemListViewModel(repository: PopulatedMockRepository()))
}
```