[SwiftUI] ForEach로 목록 스와이프 삭제 구현하기

RudinP·어제
0

Study

목록 보기
289/292

SwiftUI에서는 그냥 Swift의 ForEach와는 다르게 뷰와 관련된 ForEach이다. 리스트(=테이블뷰)에서 스와이프 액션으로 Delete를 구현하려면 ForEach뷰에 감싸야한다.

1. 기존의 List를 ForEach문으로 변경

ForEach(store.list) { memo in
	...
}

2. 해당 ForEach문을 List에 임베드

  • ForEach를 ctrl과 함께 누르고 Embed를 선택한 뒤, List로 변경하면 된다.
List {
	ForEach(store.list) { memo in
    	...
    }
}

3. ForEach의 modifier로 .onDelete를 추가한다.

주의할 점은, 리스트의 모디파이어로 추가하면 안된다는 것이다.

List {
	ForEach(store.list) { memo in
    	...
    }
    .onDelete(perform: store.delete)
}

4. delete를 실행하는 데이터관리 구조체(혹은 클래스) 에서는 IndexSet을 받아 삭제하는 메소드가 구현되어있어야 한다.

class MemoStore: ObservableObject {
	@Published var list: [Memo]
    ...
    
    func delete(set: IndexSet) {
    	for index in set {
        	list.remove(at: index)
        }
    }
}
profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글