以下类在全球范围内可用。

  • List 是 Realm 中用于定义多个 container 关系的类型。

    与 Swift 的Array一样, List是一种泛型类型,会根据其存储的类型进行参数化。 它可以是Object子类或以下类型之一: BoolIntInt8Int16Int32Int64FloatDoubleStringDataDateDecimal128ObjectId (及其可选版本)

    与 Swift 的原生collection不同, List是引用类型,只有当托管它们的 Realm 以只读方式打开时,它们才是不可变的。

    可以使用与Results<Element>相同的谓词对列表进行过滤和排序。

    查看更多

    声明

    Swift

    public final class List<Element> : RLMSwiftCollectionBase, RealmCollectionImpl where Element : RealmCollectionValue
    extension List: ObservableObject, RealmSubscribable
    extension List: MutableCollection
    extension List: Decodable where Element: Decodable
    extension List: Encodable where Element: Encodable
  • MutableSet 是 Realm 中的 container 类型,用于定义以不同值作为对象的多对多关系。

    与 Swift 的Set一样, MutableSet是一种泛型类型,会根据其存储的类型进行参数化。 它可以是Object子类或以下类型之一: BoolIntInt8Int16Int32Int64FloatDoubleStringDataDateDecimal128ObjectId (及其可选版本)

    与 Swift 的原生collection不同, MutableSet是引用类型,只有当托管它们的 Realm 以只读方式打开时,它们才是不可变的。

    可以使用与Results<Element>相同的谓词对 MutableSet 进行过滤和排序。

    查看更多

    声明

    Swift

    public final class MutableSet<Element> : RLMSwiftCollectionBase, RealmCollectionImpl where Element : RealmCollectionValue
    extension MutableSet: ObservableObject, RealmSubscribable
    extension MutableSet: Decodable where Element: Decodable
    extension MutableSet: Encodable where Element: Encodable
  • Map

    Map 是一个键值存储container,用于存储支持的 Realm 类型。

    Map 是一种泛型类型,可对其存储的类型进行参数化。 它可以是 对象 子类,也可以是以下类型之一:Bool、Int、Int8、Int16、Int32、Int64、Float、Double、String、Data、Date、Decimal128 和 ObjectId(及其可选版本)

    Map 仅支持String作为键。 Realm 不允许在字典键中使用.$字符。

    与 Swift 的原生collection不同, Map是一种引用类型,只有当托管它们的 Realm 以只读方式打开时,它们才是不可变的。

    可以使用与Results<Value>相同的谓词对 Map 进行过滤和排序。

    查看更多

    声明

    Swift

    public final class Map<Key, Value> : RLMSwiftCollectionBase where Key : _MapKey, Value : RealmCollectionValue
    extension Map: ObservableObject, RealmSubscribable
    extension Map: Sequence
    extension Map: RealmKeyedCollection
    extension Map: Decodable where Key: Decodable, Value: Decodable
    extension Map: Encodable where Key: Encodable, Value: Encodable
  • 128 位 IEEE 754-2008 十进制浮点数。

    此类型类似于 Swift 的内置 Decimal 类型,但分配位的方式不同,从而导致可表示的范围不同。 (NS)Decimal 存储最多 38 位的有效数字和从 -128 到 127 的指数,而此类型可存储最多 34 位的有效数字和从 -6143 到 6144 的指数。

    查看更多

    声明

    Swift

    @objc(RealmSwiftDecimal128)
    public final class Decimal128 : RLMDecimal128, Decodable, @unchecked Sendable
    extension Decimal128: Encodable
    extension Decimal128: ExpressibleByIntegerLiteral
    extension Decimal128: ExpressibleByFloatLiteral
    extension Decimal128: ExpressibleByStringLiteral
    extension Decimal128: Comparable
    extension Decimal128: Numeric
    extension Decimal128: _QueryNumeric
    extension Decimal128: _RealmCollectionValueInsideOptional
    extension Decimal128: MinMaxType
    extension Decimal128: AddableType
    extension Decimal128: SortableType
  • 一个(可能)12 字节的唯一ObjectId。

    ObjectId 类似于 GUID 或 UUID,可用于唯一标识对象,而无需集中式 ID 生成器。 ObjectID 由以下部分组成:

    1. 一个 4 字节时间戳,用于测量自 Unix 纪元以来 ObjectId 的创建时间(以秒为单位)。
    2. 5 字节随机值
    3. 一个 3 字节计数器,初始化为随机值。

    ObjectId 旨在快速生成。 按 ObjectId 字段排序通常会导致对象按创建顺序排序。

    查看更多

    声明

    Swift

    @objc(RealmSwiftObjectId)
    public final class ObjectId : RLMObjectId, Decodable, @unchecked Sendable
    extension ObjectId: Encodable
    extension ObjectId: Comparable
    extension ObjectId: _RealmCollectionValueInsideOptional
  • RealmOptional实例表示无法在 Swift 中直接声明为@objc的类型的可选值,例如IntFloatDoubleBool

    要更改RealmOptional实例存储的基础值,请更改该实例的value属性。

    查看更多

    声明

    Swift

    @available(*, deprecated, renamed: "RealmProperty", message: "RealmOptional<T> has been deprecated, use RealmProperty<T?> instead.")
    public final class RealmOptional<Value> : RLMSwiftValueStorage where Value : RealmOptionalType
    extension RealmOptional: Equatable where Value: Equatable
    extension RealmOptional: Codable where Value: Codable, Value: _RealmSchemaDiscoverable

ProjectionObservable

  • Projection 是原始 Realm ObjectEmbeddedObject的轻量级模型。 您可以使用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>
    }
    
    public class Address: EmbeddedObject {
        @Persisted var city: String = ""
        @Persisted var country = ""
    }
    
    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 friendsFirstName: ProjectedCollection<String>
    }
    

    ### 支持的属性类型

    投影可通过多种方式转换原始@Persisted属性:

    • Passthrough - Projection的属性将具有与原始对象相同的名称和类型。 请参阅PersonProjection.firstName
    • Rename - 投影的属性将具有与原始对象相同的类型,只是具有新名称。
    • Keypath resolution — 您可以访问投影Object的某些属性。 请参阅PersonProjection.lastNameCapsPersonProjection.homeCity
    • Collection mappingList MutableSetObject或 的EmbeddedObject 和 可投影为原始值的collection。请参阅PersonProjection.friendsFirstName
    • Exclusion - 投影模型中未定义的原始 Realm 对象的所有属性都将从投影中排除。 对这些属性发生的任何更改都不会触发Projection的更改通知。 您仍然可以访问原始ObjectEmbeddedObject ,并直接在其上观察通知。

    注意

    @Persisted@Projected在同一 Projection 类中,每个属性都可以以不同的方式设为 。每个ObjectEmbeddedObject可以同时具有多个相同或不同类的投影。

    查询

    您可以通过调用 Realm 的objects(_:)或投影类的init(projecting:)来从 Realm 中检索给定类型的所有投影:

    let projections = realm.object(PersonProjection.self)
    let personObject = realm.create(Person.self)
    let singleProjection = PersonProjection(projecting: personObject)
    
    查看更多

    声明

    Swift

    open class Projection<Root> : RealmCollectionValue, ProjectionObservable where Root : RLMObjectBase, Root : RealmCollectionValue, Root : ThreadConfined
    extension Projection: KeypathSortable
    extension Projection: ThreadConfined where Root: ThreadConfined
    extension Projection: ObservableObject, RealmSubscribable where Root: ThreadConfined
  • RealmProperty实例表示支持类型的多态值。

    要更改RealmProperty实例存储的基础值,请更改该实例的value属性。

    注意

    RealmProperty不应在 Realm 对象上声明为@objc dynamic 。 请改用let
    查看更多

    声明

    Swift

    public final class RealmProperty<Value> : RLMSwiftValueStorage where Value : RealmPropertyType
    extension RealmProperty: Equatable where Value: Equatable
    extension RealmProperty: Codable where Value: Codable

ThreadSafe propertyWrapper

  • 可以在线程之间传递的属性包装器类型。

    @ThreadSafe属性包含对底层包装值的线程安全引用。 This reference is resolved to the thread on which the wrapped value is accessed. 每次访问该属性时,都会创建一个新的线程安全引用。

    警告

    此属性包装器不应用于长寿命对象的属性。 @ThreadSafe属性包含一个ThreadSafeReference ,它可以固定正在使用的 Realm 的源版本。 这意味着该属性包装器更适合异步分派区块捕获的函数参数和局部变量。

    声明

    Swift

    @propertyWrapper
    public final class ThreadSafe<T> where T : ThreadConfined
    extension ThreadSafe: @unchecked Sendable