CoreData
[CoreData] 인스턴스 변수로 predicate 설정하는 방법
_히처리_
2023. 8. 23. 11:41
Swift는 인스턴스 변수가 다 초기화되지 않으면 인스턴스 변수를 사용할 수 없다.
예를 들어, 다음과 같이 groupName 인스턴스 변수를 이용해서 predicate를 만들게 되면 에러가 발생한다.
struct ItemListView: View {
@Environment(\.managedObjectContext) private var viewContext
@State private var isShowingNewItemSheet = false
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)],
predicate: NSPredicate(format: "itemGroup.name == %@", groupName),
animation: .default)
private var items: FetchedResults<Item>
let groupName: String
따라서 인스턴스 변수로 predicate를 만들려면 이니셜라이저에서 처리해야 한다.
struct ItemListView: View {
@FetchRequest private var items: FetchedResults<Item>
let groupName: String
init(groupName: String) {
self.groupName = groupName
_items = FetchRequest<Item>(
sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)],
predicate: NSPredicate(format: "itemGroup.name == %@", groupName)
)
}