구조
다음 구조는 전 세계적으로 사용할 수 있습니다.
-
이 구조체는 다음을 통해 Swift에서 RLMObject에 대한 시퀀스 스타일 열거를 활성화합니다.
더 보기RLMCollection.makeIterator
선언
Swift
public struct RLMCollectionIterator : IteratorProtocol
-
이 구조체는 다음을 통해 Swift에서 RLMDictionary에 대한 시퀀스 스타일 열거를 활성화합니다.
더 보기RLMDictionary.makeIterator
선언
Swift
public struct RLMDictionaryIterator : IteratorProtocol
-
Realm
인스턴스('Realm'이라고도 함)는 Realm 데이터베이스를 나타냅니다.Realm은 디스크(
init(path:)
참조) 또는 메모리(Configuration
참조)에 저장할 수 있습니다.Realm
즉, 동일한 경로나 식별자를 사용하여 동등한Realm
객체를 구성하면 오버헤드가 제한적으로 발생합니다.특히
Realm
인스턴스가 제거되었는지 확인하려면(예를 들어, Realm을 열고 일부 속성을 확인한 다음 Realm 파일을 삭제했다가 다시 열려면 Realm을 사용하는 코드를 배치합니다.autoreleasepool {}
내에 넣고 이에 대한 다른 강력한 참조가 없는지 확인합니다.경고
동결되지 않은RLMRealm
인스턴스는 스레드에 한정되어 있으며 스레드 또는 디스패치 대기열 전체에서 공유할 수 없습니다. 이 작업을 시도하면 예외가 발생합니다. 당신은RLMRealm
Realm과 상호 작용하려는 각 스레드 또는 대기열에서 인스턴스를 가져와야 합니다. Realm은 인스턴스를 가져올 때 대기열을 명시적으로 전달하여 열린 스레드가 아닌 디스패치 대기열에 제한할 수RLMRealm
있습니다. 이 작업을 수행하지 않으면 대기열이 항상 동일한 스레드에서 실행되지 않으므로 여러 블록에서 동일한 인스턴스를 동일한 대기열에 디스패치하여 사용하려는 시도가 실패할 수 있습니다.선언
Swift
@frozen public struct Realm
extension Realm: Equatable
-
LinkingObjects
자동 업데이트 container 유형입니다. 속성 관계를 통해 소유 모델 객체에 연결된 0개 이상의 객체를 나타냅니다.LinkingObjects
List<Element>
및Results<Element>
와 동일한 조건자를 사용하여 쿼리할 수 있습니다.LinkingObjects
현재 스레드에서 쓰기 트랜잭션(write transaction)을 포함하여 항상 현재 스레드에서 Realm의 현재 상태를 반영합니다. 한 가지 예외는for...in
열거형을 사용하는 경우로, 이는 열거형이 시작될 때 존재했던 연결 객체 중 일부가 삭제되거나 수정되어 열거형 중에 대상 객체에 더 이상 연결되지 않는 경우에도 항상 열거형을 열거합니다. .
더 보기LinkingObjects
Object
모델에서만 속성으로 사용할 수 있습니다.선언
Swift
@frozen public struct LinkingObjects<Element> : RealmCollectionImpl where Element : RLMObjectBase, Element : RealmCollectionValue
extension LinkingObjects: RealmSubscribable
extension LinkingObjects: LinkingObjectsProtocol
-
Results
객체 쿼리에서 반환되는 Realm의 자동 업데이트 container 유형입니다.Results
List<Element>
와(과) 동일한 조건자를 사용하여 쿼리할 수 있으며, 쿼리를 연결하여 쿼리 결과를 추가로 필터링할 수 있습니다.Results
현재 스레드에서 쓰기 트랜잭션(write transaction)을 포함하여 항상 현재 스레드에서 Realm의 현재 상태를 반영합니다. 한 가지 예외는for...in
열거를 사용하는 경우이며, 이는 열거 중에 필터에 의해 제외되도록 일부 객체가 삭제되거나 수정되더라도 열거가 시작될 때 쿼리와 일치하는 객체를 항상 열거합니다.Results
처음 액세스할 때 느리게 평가됩니다. 쿼리 결과가 요청될 때만 쿼리를 실행합니다. 즉, 여러 개의 임시Results
를 연결하여 데이터를 정렬하고 필터링해도 중간 상태를 처리하는 불필요한 작업을 수행하지 않습니다.결과가 평가되거나 알림 차단이 추가되면 결과가 최신 상태로 유지되며 가능하면 백그라운드 스레드에서 최신 상태로 유지하기 위한 작업이 수행됩니다.
결과 인스턴스는 직접 인스턴스화할 수 없습니다.
더 보기선언
Swift
@frozen public struct Results<Element> : Equatable, RealmCollectionImpl where Element : RealmCollectionValue
extension Results: RealmSubscribable
extension Results: Encodable where Element: Encodable
-
더 보기SectionedResults
개별ResultsSection
를 요소로 보유하는 유형 안전 collection입니다. container는 느리게 평가되므로 기본 collection이 변경된 경우 섹션 키의 전체 재계산이 수행됩니다.SectionedResults
인스턴스는 관찰할 수 있으며ThreadConfined
도 준수합니다.선언
Swift
public struct SectionedResults<Key, SectionElement> : SectionedResultImpl where Key : _Persistable, Key : Hashable, SectionElement : RealmCollectionValue
extension SectionedResults: RealmSubscribable
-
더 보기ResultsSection
은(는) 지정된 섹션 키에 속한 객체에 대한 액세스를 허용하는 collection입니다. collection은 느리게 평가되므로 기본 collection이 변경된 경우 섹션 키의 전체 재계산이 수행됩니다.ResultsSection
인스턴스는 관찰할 수 있으며ThreadConfined
도 준수합니다.선언
Swift
public struct ResultsSection<Key, T> : SectionedResultImpl where Key : _Persistable, Key : Hashable, T : RealmCollectionValue
extension ResultsSection: RealmSubscribable
extension ResultsSection: Identifiable
-
유형이 지워진
RealmCollection
입니다.
더 보기RealmCollection
의 인스턴스는 동일한Element
유형을 가진 불투명한 기본 collection으로 작업을 전달합니다. 이 유형은 여러 유형의 Realm collection에서 작동하거나 저장할 수 있는 일반적이지 않은 코드를 작성하는 데 사용할 수 있습니다. 원본 collection을 직접 사용하는 것에 대한 런타임 오버헤드가 없습니다.선언
Swift
@frozen public struct AnyRealmCollection<Element> : RealmCollectionImpl where Element : RealmCollectionValue
extension AnyRealmCollection: RealmSubscribable
extension AnyRealmCollection: Encodable where Element: Encodable
-
ProjectedCollection은 프로젝션의 속성에 대한 특수한 유형의 collection으로, Realm 객체의
List
를 프로젝트하려는 경우에 사용해야 합니다. 이 유형은 수동으로 인스턴스화할 필요가 없습니다.List
속성에서projectTo
을(를) 호출하여 사용합니다.
더 보기class PersistedListObject: Object { @Persisted public var people: List<CommonPerson> } class ListProjection: Projection<PersistedListObject> { @Projected(\PersistedListObject.people.projectTo.firstName) var strings: ProjectedCollection<String> }
선언
Swift
public struct ProjectedCollection<Element> : RandomAccessCollection, CustomStringConvertible, ThreadConfined where Element : RealmCollectionValue
-
CollectionElementMapper
실제 collection 객체를ProjectedCollection
로 변환합니다.예를 들면 다음과 같습니다.
class Person: Object { @Persisted var dogs: List<Dog> } class PersonProjection: Projection<Person> { @Projected(\Person.dogs.projectTo.name) var dogNames: ProjectedCollection<String> }
이 코드에서
Person
의 개 목록은projectTo
을 통해 개 이름 목록에 추가됩니다.선언
Swift
@dynamicMemberLookup public struct CollectionElementMapper<Element> where Element : RLMObjectBase, Element : RealmCollectionValue
-
Schema
인스턴스는 Realm에서 관리하는 모델 객체 스키마 컬렉션을 나타냅니다.Realm을 사용할 때
Schema
인스턴스를 사용하면 마이그레이션을 수행하고 데이터베이스의 스키마를 인트로스펙션할 수 있습니다.스키마는 코어 데이터베이스의 collection 테이블에 매핑됩니다.
더 보기선언
Swift
@frozen public struct Schema : CustomStringConvertible
extension Schema: Equatable
-
더 보기SectionedResults
인스턴스의 반복자(iterator)입니다.선언
Swift
@frozen public struct SectionedResultsIterator<Key, Element> : IteratorProtocol where Key : _Persistable, Key : Hashable, Element : RealmCollectionValue
-
더 보기Section
인스턴스의 반복자(iterator)입니다.선언
Swift
@frozen public struct SectionIterator<Element> : IteratorProtocol where Element : RealmCollectionValue
-
더 보기SortDescriptor
는sorted(sortDescriptors:)
와 함께 사용할 키 경로와 정렬 순서를 저장합니다.NSSortDescriptor
와(과) 비슷하지만 Realm의 쿼리 엔진에서 효율적으로 실행할 수 있는 기능의 하위 집합만 지원합니다.선언
Swift
@frozen public struct SortDescriptor
extension SortDescriptor: CustomStringConvertible
extension SortDescriptor: Equatable
extension SortDescriptor: ExpressibleByStringLiteral
-
Realm 알림을 래핑하는 구독입니다.
더 보기선언
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @frozen public struct ObservationSubscription : Subscription
-
Realm AsyncOpenTask를 래핑하는 구독입니다.
더 보기선언
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @frozen public struct AsyncOpenSubscription : Subscription
-
지도에서 요소의 오프셋을 보유하는 컨테이너 유형입니다.
더 보기선언
Swift
public struct MapIndex
-
지도에 단일 키-값 항목을 보관하기 위한 container입니다. 튜플이 일반 인수로 표현할 수 없는 경우에 사용됩니다.
더 보기선언
Swift
public struct SingleMapEntry<Key, Value> : _RealmMapValue, Hashable where Key : _MapKey, Value : RealmCollectionValue
-
선언
Swift
@frozen public struct PropertyChange
-
이 클래스는 Realm 모델 객체 스키마를 나타냅니다.
Realm을 사용할 때
ObjectSchema
인스턴스를 사용하면 마이그레이션을 수행하고 데이터베이스의 스키마를 인트로스펙션할 수 있습니다.객체 스키마는 코어 데이터베이스의 테이블에 매핑됩니다.
더 보기선언
Swift
@frozen public struct ObjectSchema : CustomStringConvertible
extension ObjectSchema: Equatable
-
@Persisted는 Realm에서 managed해야 하는 객체 하위 클래스의 속성을 선언하는 데 사용됩니다.
사용 예시:
class MyModel: Object { // A basic property declaration. A property with no // default value supplied will default to `nil` for // Optional types, zero for numeric types, false for Bool, // an empty string/data, and a new random value for UUID // and ObjectID. @Persisted var basicIntProperty: Int // Custom default values can be specified with the // standard Swift syntax @Persisted var intWithCustomDefault: Int = 5 // Properties can be indexed by passing `indexed: true` // to the initializer. @Persisted(indexed: true) var indexedString: String // Properties can set as the class's primary key by // passing `primaryKey: true` to the initializer @Persisted(primaryKey: true) var _id: ObjectId // List and set properties should always be declared // with `: List` rather than `= List()` @Persisted var listProperty: List<Int> @Persisted var setProperty: MutableSet<MyObject> // LinkingObjects properties require setting the source // object link property name in the initializer @Persisted(originProperty: "outgoingLink") var incomingLinks: LinkingObjects<OtherModel> // Properties which are not marked with @Persisted will // be ignored entirely by Realm. var ignoredProperty = true }
indexed: true
을 이니셜라이저에 전달하여 Int, Bool, String, ObjectId 및 Date 속성을 인덱싱할 수 있습니다. 속성을 인덱싱하면 해당 속성에 대한 동일성 쿼리의 성능이 향상되지만, 쓰기 성능은 약간 저하됩니다. 현재 이 인덱스를 사용하는 다른 작업은 없습니다.primaryKey: true
를 이니셜라이저에 전달하여 속성 을 클래스의 기본 키 설정하다 수 있습니다. 복합 프라이머리 키는 지원되지 않으며, 둘 이상의 속성 을 기본 키 설정하면 런타임에 예외가 발생합니다. Int, string, UUID 및 ObjectId 속성만 기본 키 만들 수 있습니다. The primary key property can only be mutated on unmanaged objects, and mutating it on an object which has been added to a Realm will throw an exception.속성은 표준 Swift 구문을 사용하여 선택적으로 기본값을 지정할 수 있습니다. 기본값을 지정하지 않으면 처음 액세스할 때 값이 생성됩니다(모든 Optional 유형의 경우
nil
, 숫자 유형의 경우 0, Bool의 경우 false, 빈 문자열/데이터의 경우, UUID 및 ObjectID에 대한 새로운 임의의 값). 목록 및 MutableSet 속성은 빈 List/MutableSet의 기본값으로 설정하여 정의 해서는 안 됩니다. 이렇게 하면 작동하지만 Realm에서 managed하는 객체에 액세스할 때 성능이 저하됩니다. 마찬가지로 ObjectID 속성을ObjectID.generate()
로 초기화 해서는 안 되며, 이렇게 하면 추가 ObjectID가 생성된 후 Realm에서 읽을 때 삭제될 수 있습니다.클래스에 @Persisted 속성이 하나 이상 있으면 다른 모든 속성은 Realm에서 무시됩니다. 즉, managed 속성이 유지되지 않으며 쿼리 및 managed 속성이 필요한 정렬 및 집계와 같은 기타 작업에 사용할 수 없습니다.
@Persisted는 객체 또는 EmbeddedObject 하위 클래스의 속성 이외의 다른 곳에서는 사용할 수 없으며 다른 위치에서 사용하려고 하면 런타임 오류가 발생합니다.
더 보기선언
Swift
@propertyWrapper public struct Persisted<Value> where Value : _Persistable
extension Persisted: Decodable where Value: Decodable
extension Persisted: Encodable where Value: Encodable
extension Persisted: OptionalCodingWrapper where Value: ExpressibleByNilLiteral
-
@Projected
Realm에서 managed해야 하는Projection
프로토콜의 속성을 선언하는 데 사용됩니다.사용 예시:
더 보기public class Person: Object { @Persisted var firstName = "" @Persisted var lastName = "" @Persisted var address: Address? @Persisted var friends: List<Person> @Persisted var reviews: List<String> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var firstName @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.address.city) var homeCity @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let people: Results<PersonProjection> = realm.objects(PersonProjection.self)
선언
Swift
@propertyWrapper public struct Projected<T, Value> : AnyProjected where T : RLMObjectBase
-
선언
Swift
@frozen public struct ProjectedPropertyChange
-
Property
인스턴스는 객체 스키마의 컨텍스트에서 Realm이 managed하는 속성을 나타냅니다. 이러한 속성은 Realm 파일에 유지되거나 Realm의 다른 데이터에서 계산될 수 있습니다.Realm을 사용하는 경우 속성 인스턴스를 사용하면 마이그레이션을 수행하고 데이터베이스의 스키마를 인트로스펙션할 수 있습니다.
속성 인스턴스는 코어 데이터베이스의 열에 매핑됩니다.
더 보기선언
Swift
@frozen public struct Property : CustomStringConvertible
extension Property: Equatable
-
더 보기String
쿼리에 대한 옵션을 나타내는 열거형입니다.선언
Swift
public struct StringOptions : OptionSet, Sendable
-
Query
형식 안전 쿼리 조건자를 만드는 데 사용되는 클래스입니다.Query
을(를) 사용하면 Swift 스타일의 쿼리 표현식을 만든 다음NSPredicate
로 구성할 수 있습니다.Query
클래스는 직접 인스턴스화해서는 안 되며 쿼리 표현식을 인수로 사용하는 클로저 내에서 매개변수로만 사용해야 합니다. 예:public func where(_ query: ((Query<Element>) -> Query<Element>)) -> Results<Element>
그러면 위의 함수를 다음과 같이 사용합니다.
let results = realm.objects(Person.self).query { $0.name == "Foo" || $0.name == "Bar" && $0.age >= 21 }
지원되는 술어 유형
Prefix
- NOT
!
swift let results = realm.objects(Person.self).query { !$0.dogsName.contains("Fido") || !$0.name.contains("Foo") }
비교
- Equals
==
- 같지 않음
!=
- 보다 큼
>
- 보다 작은
<
- GreaterThanOrEqual
>=
- LessThanOrEqual
<=
- between
.contains(_ range:)
컬렉션
- 인
.contains(_ element:)
- between
.contains(_ range:)
Map
- @allKeys
.keys
- @allValues
.values
복합
- 개인정보 정책에
&&
- 또는
||
collection 애그리게이션
- @avg
.avg
- @min
.min
- @max
.max
- @sum
.sum
- @count
.count
swift let results = realm.objects(Person.self).query { !$0.dogs.age.avg >= 0 || !$0.dogsAgesArray.avg >= 0 }
기타
- NOT
!
- subquery
($0.fooList.intCol >= 5).count > n
선언
Swift
@dynamicMemberLookup public struct Query<T>
- NOT
-
더 보기RealmCollection
인스턴스의 반복자(iterator)입니다.선언
Swift
@frozen public struct RLMIterator<Element> : IteratorProtocol where Element : RealmCollectionValue
-
더 보기RealmKeyedCollection
인스턴스의 반복자(iterator)입니다.선언
Swift
@frozen public struct RLMMapIterator<Element> : IteratorProtocol where Element : _RealmMapValue
-
지도의 각 항목에 대해
더 보기(key: Key, value: Value)
쌍을 생성하는Map<Key, Value>
의 반복기입니다.선언
Swift
@frozen public struct RLMKeyValueIterator<Key, Value> : IteratorProtocol where Key : _MapKey, Value : RealmCollectionValue
-
관찰 가능 객체를 인스턴스화하는 속성 래퍼 유형입니다.
@StateRealmObject
속성을 속성 선언에 적용하고 doc://com.apple.documentation/documentation 을 준수하는 초기 값을 제공하여SwiftUI/View
,SwiftUI/App
또는SwiftUI/Scene
에서 상태 Realm 객체를 생성합니다. /Combine/ObservableObject 프로토콜:@StateRealmObject var model = DataModel()
SwiftUI는 객체를 선언하는 구조체의 각 인스턴스에 대해 객체의 새 인스턴스를 한 번만 생성합니다. 관찰 가능한 영역 객체의 게시된 속성이 변경되면 SwiftUI는 해당 속성에 의존하는 모든 뷰의 부분을 업데이트합니다. 관리되지 않는 경우 속성을 객체 자체에서 읽고, 그렇지 않으면 기본 Realm에서 읽습니다. 값을 변경하면 뷰가 비동기적으로 업데이트됩니다.
Text(model.title) // Updates the view any time `title` changes.
상태 객체를
SwiftUI/ObservedRealmObject
속성이 있는 속성에 전달할 수 있습니다.$
연산자를 사용하여 상태 객체의 속성 중 하나에 대한SwiftUI/Binding
을(를) 가져옵니다. 객체의 속성 중 하나에 대한 양방향 연결을 생성하려는 경우 바인딩을 사용합니다. 예를 들어SwiftUI/Toggle
가 모델에 저장된isEnabled
라는 부울 값을 제어하도록 할 수 있습니다.Toggle("Enabled", isOn: $model.isEnabled)
이렇게 하면 수정된
더 보기isEnabled
속성이model
객체의 Realm에 기록됩니다.선언
Swift
@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) @MainActor @propertyWrapper public struct StateRealmObject<T> : DynamicProperty where T : RealmSubscribable, T : ThreadConfined, T : Equatable
-
영역에서 쿼리의 결과를 나타내는 속성 래퍼 유형입니다.
결과는 환경 값
realmConfiguration
에서 제공하는 영역 구성을 사용합니다.SwiftUI가 아닌 결과 collection과 달리 ObservedResults는 변경 가능합니다. ObservedResults collection에 대한 쓰기는 암시적으로 쓰기 트랜잭션 (write transaction)을 수행합니다. 관련 쿼리에서 필터링할 객체를 ObservedResults에 추가하면 객체가 영역에 추가되지만 ObservedResults에는 포함되지 않습니다.
더 보기@ObservedResults var v
SwiftUI에서 이$v
주어지면 은BoundCollection
를 나타냅니다.선언
Swift
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) @propertyWrapper @MainActor public struct ObservedResults<ResultType> : DynamicProperty, BoundCollection where ResultType : KeypathSortable, ResultType : RealmFetchable, ResultType : _ObservedResultsValue, ResultType : Identifiable
-
섹션으로 구분된 결과 collection을 나타내는 속성 래퍼 유형입니다.
섹션화된 결과는 이니셜라이저에
configuration
이(가) 설정되지 않은 경우 환경 값realmConfiguration
에서 제공하는 영역 구성을 사용합니다.
더 보기@ObservedSectionedResults var v
SwiftUI에서 이$v
주어지면 은BoundCollection
를 나타냅니다.선언
Swift
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) @propertyWrapper @MainActor public struct ObservedSectionedResults<Key, ResultType> : DynamicProperty, BoundCollection where Key : _Persistable, Key : Hashable, ResultType : KeypathSortable, ResultType : RealmFetchable, ResultType : _ObservedResultsValue, ResultType : Identifiable
-
선언
Swift
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) @MainActor @propertyWrapper public struct ObservedRealmObject<ObjectType>: DynamicProperty where ObjectType: RealmSubscribable & ThreadConfined & ObservableObject & Equatable
-
스레드에 한정된 객체에 대한 스레드 세이프 참고를 포함하는 스레드 간에 전달되기 위한 객체입니다.
다른 스레드에서 대상 Realm의 스레드 세이프 참고를 확인하려면
Realm.resolve(_:)
으로 전달합니다.경고
ThreadSafeReference
객체는 최대 한 번만 해석되어야 합니다.ThreadSafeReference
확인에 실패하면 참고 할당이 해제될 때까지 Realm의 소스 버전이 고정됩니다.참고
소스 Realm의 버전에 대한 데이터는 모든 참고가 확인되거나 할당 해제될 때까지 유지되므로 수명이 짧은
ThreadSafeReference
을(를) 선호합니다.~를 참조하세요.
~를 참조하세요.
선언
Swift
@frozen public struct ThreadSafeReference<Confined> where Confined : ThreadConfined
extension ThreadSafeReference: Sendable