SwiftUI 뷰 간에 Realm 데이터 전달
Realm Swift SDK는 뷰 간에 Realm 데이터를 전달하는 여러 가지 방법을 제공합니다.
뷰에 Realm 객체 전달
환경 주입을 사용하여 다음을 수행합니다.
뷰에 파티션 값 삽입
열린 Realm을 뷰에 삽입
뷰에 Realm 구성 삽입
View에 Realm 객체 전달
@ObservedRealmObject
또는 @ObservedResults
속성 래퍼를 사용하면 암시적으로 영역을 열고 지정된 객체 또는 결과를 검색합니다. 그런 다음 해당 객체를 계층 구조 아래의 뷰에 전달할 수 있습니다.
struct DogsView: View { Dog.self) var dogs ( /// The button to be displayed on the top left. var leadingBarButton: AnyView? var body: some View { NavigationView { VStack { // The list shows the dogs in the realm. // The ``@ObservedResults`` above implicitly opens a realm and retrieves // all the Dog objects. We can then pass those objects to views further down the // hierarchy. List { ForEach(dogs) { dog in DogRow(dog: dog) }.onDelete(perform: $dogs.remove) }.listStyle(GroupedListStyle()) .navigationBarTitle("Dogs", displayMode: .large) .navigationBarBackButtonHidden(true) .navigationBarItems( leading: self.leadingBarButton, // Edit button on the right to enable rearranging items trailing: EditButton()) }.padding() } } }
환경 값 전달
환경 주입은 Realm 을 SwiftUI 개발에 유용한 도구입니다. Realm 속성 래퍼는 SwiftUI 애플리케이션 을 개발할 때 환경 값으로 작업할 수 있는 다양한 방법을 제공합니다.
파티션 값 삽입
파티션 기반 동기화 를 사용하는 경우 환경 삽입을 사용하여 .partitionValue
환경 값을 전달할 수 있습니다. @AsyncOpen
또는 @AutoOpen
를 수행하는 뷰에 이를 삽입합니다.
// If there is a logged in user, pass the user ID as the // partitionValue to the view that opens a realm. OpenPartitionBasedSyncRealmView().environment(\.partitionValue, user.id)
그런 다음 속성 래퍼를 사용하여 동기화된 Realm을 열 때 partitionValue
를 빈 문자열로 둡니다. 속성 래퍼는 위에서 전달된 환경 객체의 값을 채웁니다.
// We can use an empty string as the partitionValue here because we're // injecting the user.id as an environment value from the LoginView. YOUR_APP_SERVICES_APP_ID_HERE, partitionValue: "", timeout: 4000) var autoOpen (appId:
팁
Flexible Sync로 마이그레이션
Atlas App Services Device Sync 모드를 파티션 기반 동기화에서 Flexible Sync 로 자동 마이그레이션할 수 있습니다. 이를 통해 보다 표현력이 뛰어나고 세분화된 Flexible Sync 구독 및 권한을 활용하여 사용자가 읽고 쓸 수 있는 동기화된 데이터를 관리할 수 있습니다. 자세한 내용 은 파티션 기반 동기화에서 Flexible Sync로 마이그레이션을 참조하세요.
열린 Realm 삽입
다른 SwiftUI 뷰에서 연 영역을 환경 값으로 뷰에 삽입할 수 있습니다. 속성 래퍼는 전달된 Realm을 사용하여 뷰를 채웁니다.
ListView() .environment(\.realm, realm)
Realm 구성 삽입
환경 객체에 다른 구성을 전달하여 기본 Realm이 아닌 Realm을 사용할 수 있습니다.
LocalOnlyContentView() .environment(\.realmConfiguration, Realm.Configuration( /* ... */ ))