티스토리 뷰

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)
        )
    }
댓글
공지사항