[SwiftUI]List화한 CoreData를 가로 스와이프로 행 삭제하는 방법
하고 싶었던 일
아래와 같이 CoreData를 참조한 리스트를 가로 스와이프로 삭제하고 싶었다.
UI 요소뿐만 아니라 원본 데이터 당 삭제합니다.
잘 다른 페이지에서 보이는 이하와 같은 구현이라고 CoreData의 형태가 맞지 않고 처리가 잘 되지 않는다.
struct ContentView: View {
@State private var data = ["one", "two", "three"]
var body: some View {
List {
ForEach(data, id: \.self) { data in
Text(data)
}
/// 行削除操作時に呼び出す処理の指定
.onDelete(perform: rowRemove)
}
}
/// 行削除処理
func rowRemove(offsets: IndexSet) {
data.remove(atOffsets: offsets)
}
}
했던 일
1.CoreData를 사용할 수 있는지 다음 설정을 확인합니다.
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: TestCoreData.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \TestCoreData.name, ascending: true),
]
) var testCoreData: FetchedResults<TestCoreData>
2. 아래와 같은 리스트에 .onDelete(perform:~)를 추가.
List {
ForEach(testCoreData, id: \.self) { testCoreData in
Text("Creator: \(testCoreData.creator ?? "Anonymous")")
}.onDelete(perform: removeCoreData)
}
3. 리스트의 번호를 보관 유지한 offsets 를 사용해, 삭제하는 CoreData 의 요소를 지정.
func removeCoreData(at offsets: IndexSet) {
for index in offsets {
let putTestCoreData = testCoreData[index]
managedObjectContext.delete(putTestCoreData)
}
}
이상! !
Reference
이 문제에 관하여([SwiftUI]List화한 CoreData를 가로 스와이프로 행 삭제하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ffrr55s/items/cd5e1f94e6021b97e673
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
struct ContentView: View {
@State private var data = ["one", "two", "three"]
var body: some View {
List {
ForEach(data, id: \.self) { data in
Text(data)
}
/// 行削除操作時に呼び出す処理の指定
.onDelete(perform: rowRemove)
}
}
/// 行削除処理
func rowRemove(offsets: IndexSet) {
data.remove(atOffsets: offsets)
}
}
1.CoreData를 사용할 수 있는지 다음 설정을 확인합니다.
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: TestCoreData.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \TestCoreData.name, ascending: true),
]
) var testCoreData: FetchedResults<TestCoreData>
2. 아래와 같은 리스트에 .onDelete(perform:~)를 추가.
List {
ForEach(testCoreData, id: \.self) { testCoreData in
Text("Creator: \(testCoreData.creator ?? "Anonymous")")
}.onDelete(perform: removeCoreData)
}
3. 리스트의 번호를 보관 유지한 offsets 를 사용해, 삭제하는 CoreData 의 요소를 지정.
func removeCoreData(at offsets: IndexSet) {
for index in offsets {
let putTestCoreData = testCoreData[index]
managedObjectContext.delete(putTestCoreData)
}
}
이상! !
Reference
이 문제에 관하여([SwiftUI]List화한 CoreData를 가로 스와이프로 행 삭제하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ffrr55s/items/cd5e1f94e6021b97e673텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)