티스토리 뷰

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)
        )
    }

'CoreData' 카테고리의 다른 글

[CoreData] undo() / redo() / reset() / rollback()  (0) 2023.09.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함