Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

SwiftUI 뷰 간에 Realm 데이터 전달

이 페이지의 내용

  • View에 Realm 객체 전달
  • 환경 값 전달
  • 파티션 값 삽입
  • 열린 Realm 삽입
  • Realm 구성 삽입

Realm Swift SDK는 뷰 간에 Realm 데이터를 전달하는 여러 가지 방법을 제공합니다.

  • 뷰에 Realm 객체 전달

  • 환경 주입을 사용하여 다음을 수행합니다.

    • 뷰에 파티션 값 삽입

    • 열린 Realm을 뷰에 삽입

    • 뷰에 Realm 구성 삽입

@ObservedRealmObject 또는 @ObservedResults 속성 래퍼를 사용하면 암시적으로 영역을 열고 지정된 객체 또는 결과를 검색합니다. 그런 다음 해당 객체를 계층 구조 아래의 뷰에 전달할 수 있습니다.

struct DogsView: View {
@ObservedResults(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.
@AutoOpen(appId: YOUR_APP_SERVICES_APP_ID_HERE, partitionValue: "", timeout: 4000) var autoOpen

Flexible Sync로 마이그레이션

Atlas App Services Device Sync 모드를 파티션 기반 동기화에서 Flexible Sync 로 자동 마이그레이션할 수 있습니다. 이를 통해 보다 표현력이 뛰어나고 세분화된 Flexible Sync 구독 및 권한을 활용하여 사용자가 읽고 쓸 수 있는 동기화된 데이터를 관리할 수 있습니다. 자세한 내용 은 파티션 기반 동기화에서 Flexible Sync로 마이그레이션을 참조하세요.

다른 SwiftUI 뷰에서 연 영역을 환경 값으로 뷰에 삽입할 수 있습니다. 속성 래퍼는 전달된 Realm을 사용하여 뷰를 채웁니다.

ListView()
.environment(\.realm, realm)

환경 객체에 다른 구성을 전달하여 기본 Realm이 아닌 Realm을 사용할 수 있습니다.

LocalOnlyContentView()
.environment(\.realmConfiguration, Realm.Configuration( /* ... */ ))

돌아가기

변경 사항에 대한 반응