티스토리 뷰
SwiftUI로 프로젝트를 하는데 이런 장바구니 화면에서 문제가 생겼다.
첫번째 아이템이든 두번째 아이템이든 세번째 아이템이든 무엇을 삭제해도 마지막 아이템이 사라지는 이슈가 있었다. 근데 웃긴게 프린트 찍어보니까 뷰모델에서는 제대로 적용돼서 원하는 요소가 삭제됐는데 뷰에서는 그게 안 되는 것…
일단 해결을 했는데 index를 이용해서 삭제하는게 아니라 id를 이용해서 삭제를 하면 된다.
기존의 코드
// CartView.swift
@StateObject var viewModel = MyPageViewModel.shared
ForEach(viewModel.cartItems.indices, id: \.self) { index in
CartCardView(viewModel: CartViewModel(viewModel.cartItems[index]),
isSelected: $viewModel.cartItems[index].selected,
count: $viewModel.cartItems[index].count,
cartItemId: $viewModel.cartItems[index].id)
Divider()
}
// MyPageViewModel.swift
@Published var cartItems: [CartItem]
func removeCartItem(at index: Int) {
guard cartItems.indices.contains(index) else {
return
}
cartItems.remove(at: index)
}
새로운 코드
// CartView.swift
@StateObject var viewModel = MyPageViewModel.shared
ForEach($viewModel.cartItems) { $cartItem in
CartCardView(viewModel: CartViewModel(cartItem),
isSelected: $cartItem.selected,
count: $cartItem.count)
Divider()
}
// MyPageViewModel.swift
@Published var cartItems: [CartItem]
func removeCartItem(id: Int) {
cartItems.removeAll { $0.id == id }
}
왜 이렇게 하면 해결이 되는지 이유는 자세히 모르겠다… 나중에 찾으면 다시 올려야지
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] 기본 폰트 크기 (0) | 2024.10.04 |
---|---|
[SwiftUI] TabView에 그림자 적용하기 (0) | 2024.10.04 |
[SwiftUI] 스플래시 스크린 띄우기 (0) | 2024.03.19 |
[SwiftUI] 배너와 자동스크롤 구현하기 (0) | 2024.03.06 |
[SwiftUI] .sheet 사용시 현재 뷰가 사라지는 문제 해결하기 (0) | 2024.03.05 |