반응형

Hacking with Swift 사이트의 강좌 번역본입니다.

 

[원문 : https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-a-core-data-fetch-request-using-fetchrequest]

 

How to create a Core Data fetch request using @FetchRequest

 

가져오기 요청으로 지정한 특정 기준과 일치하는 Core Data 결과를 불러올수 있고, SwiftUI는 이러한 결과와 사용자 인터페이스 요소에 직접 바인딩 할 수 있습니다.

 

Core Data와 SwiftUI 설정 지침을 따르는 경우, 관리 객체 컨텍스트는 이미 SwiftUI environment에 추가되어 있습니다.

 

그 단계가 필요합니다. Core Data 가져오기 요청을 실행하고 SwiftUI 목록 내부에 데이터를 보여주는 방법을 알고 싶어하지만, 위의 링크에 있는 단계를 따르지 않고 @FetchRequest를 사용하면 SwiftUI는 설정이 완료 될것이라 예상하기 때문에, 런타임 크래쉬가 날 것입니다.

 

관리 객체 컨텍스트가 .managedObjectContetxt 키로environment에 첨부되어 있으면, 뷰 안에 Core Data 가져오기 요청을 자동으로 만들고 관리하는 프로퍼티를 만들기 위해, @FetchRequest 프로퍼티 래퍼(wrapper)를 사용할 수 있습니다. 

 

가져오기 요청을 만들기 위해서 2가지 정보가 필요합니다: 쿼리하고자 하는 엔티티(entity)와 결과가 반환되는 순서를 결정할 정렬 조건. 예제에서 이름(name)과 작성자 속성(creator attributes)을 가진 ProgrammingLanguages 엔티티를 만들었기에, 다음과 같이 가져오기 요청을 만들 수 있습니다.

@FetchRequest(entity: ProgrammingLanguage.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true)]) var languages: FetchedResults<ProgrammingLanguage>

이름을 알파벳 순으로 정렬된 모든 프로그래밍 언어를 불러옵니다.

 

보다시피, sortDescriptors 매개변수는 배열이므로, 다음과 같이 필요한만큼 많은 정렬 옵션을 제공할 수 있습니다.

@FetchRequest(entity: ProgrammingLanguage.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true), NSSortDescriptor(keyPath: \ProgrammingLanguage.creator, ascending: false)]) var languages: FetchedResults<ProgrammingLanguage>

 

네, 코드가 엄청나므로, 좀 더 읽기 쉽게 나누어도 비난하지 않을 것입니다.

@FetchRequest(
    entity: ProgrammingLanguage.entity(),
    sortDescriptors: [
        NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true),
        NSSortDescriptor(keyPath: \ProgrammingLanguage.creator, ascending: false)
    ]
) var languages: FetchedResults<ProgrammingLanguage>

 

가져오기 요청을 만드는 방법과 상관없이, 그 결과는 SwiftUI 뷰 내부에서 직접 사용될 수 있습니다. 예를들어, 다음과 같이 모든 언어의 목록을 보여줄 수 있습니다.

List(languages, id: \.self) { language in
    Text(language.name ?? "Unknown")
}

 

반응형
Posted by 까칠코더
,