类型别名

以下类型别名在全局范围内可用。

别名

  • PropertyType 是一个枚举,描述 Realm 模型支持的所有属性类型。

    有关详细信息,请参阅对象模型和模式

    基元类型

    • Int
    • Bool
    • Float
    • Double

    Realm 对象类型

    关系:数组(在 Swift 中为List )和Object类型

    声明

    迅速

    public typealias PropertyType = RLMPropertyType
  • 订阅 Realm 变更的方法返回的不透明令牌。

    声明

    迅速

    public typealias NotificationToken = RLMNotificationToken
  • Object 是用于定义 Realm 模型对象的类。

    在 Realm 中,您可以通过子类化Object并添加要托管的属性来定义模型类。 然后,实例化并使用自定义子类,而不是直接使用Object类。

    class Dog: Object {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    

    支持的属性类型

    • String
    • Int, Int8 , Int16 , Int32 , Int64
    • Float
    • Double
    • Bool
    • Date
    • Data
    • Decimal128
    • ObjectId
    • UUID
    • AnyRealmValue
    • 原始类型为合法属性类型的任何 RawRepresentable 枚举。 必须将枚举显式标记为符合PersistableEnum
    • Object 子类,用于建模多对一关系
    • EmbeddedObject 子类,用于对拥有一对一关系进行建模

    除 之外,上述所有类型也可能为OptionalAnyRealmValueObjectEmbeddedObject子类必须为可选。

    除单个值外,还支持三种不同的collection类型:

    • List<Element>:类似于Array的有序可变collection。
    • MutableSet<Element>:类似于Set的无序唯一collection。
    • Map<String, Element>:类似于Dictionary的无序键值collection。

    collection的元素类型可以是上面列出的任何受支持的非collection属性类型。collection本身可能不是可选的,但其中的值可能是可选的, ObjectEmbeddedObject子类的列表和集合除外。

    最后, LinkingObjects属性可用于追踪哪些对象链接到此对象。

    Realm 应存储的所有属性都必须显式标有@Persisted 。 任何未标记@Persisted的属性都将被 Realm 完全忽略,并且可以是任何类型。

    查询

    您可以通过调用objects(_:)实例方法从 Realm 中检索给定类型的所有对象。

    关系

    有关更多详细信息,请参阅我们的Swift 指南

    声明

    迅速

    public typealias Object = RealmSwiftObject
  • EmbeddedObject 是用于定义嵌入式 Realm 模型对象的基类。

    嵌入式对象的工作方式与普通对象类似,但由单个父对象(其本身可能是嵌入式对象)拥有。 与普通的顶级对象不同,嵌入式对象不能直接在 Realm 中创建或添加到 Realm 中。 相反,它们只能作为父对象的一部分创建,或者通过将非托管对象分配给父对象的属性来创建。 当父对象被删除或父对象被修改为不再指向嵌入式对象时(通过重新分配对象属性或从包含它的列表中删除嵌入式对象),嵌入式对象会自动删除。

    嵌入式对象只能有一个链接到它们的父对象,尝试链接到现有的托管嵌入式对象会引发异常。

    EmbeddedObject支持的属性类型与Object相同,不同之处在于嵌入式对象无法链接到顶级对象,因此不支持ObjectList<Object>属性( EmbeddedObjectList<EmbeddedObject>)。

    嵌入式对象不能具有主键或索引属性。

    class Owner: Object {
        @Persisted var name: String
        @Persisted var dogs: List<Dog>
    }
    class Dog: EmbeddedObject {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted(originProperty: "dogs") var owner: LinkingObjects<Owner>
    }
    

    声明

    迅速

    public typealias EmbeddedObject = RealmSwiftEmbeddedObject
  • 一个结构体,表示由纬度和经度值构成的点的坐标。

    • 纬度范围介于 -90 到 90 度(含)之间。
    • 经度范围介于 -180 到 180 度(含)之间。

    尝试创建GeoPoint时,超出此范围的值将返回 nil。

    注意

    没有专门的类型来存储地理空间点,而是应将点存储为GeoJson 形状的嵌入式对象,如下所述。 地理空间查询 ( geoWithin ) 只能在此类对象中执行,否则会抛出异常。

    Realm 中的持久化地理点目前是使用鸭子类型来完成的,这意味着可以查询具有特定形状的任何模型类,就好像它包含地理位置一样。

    需要满足以下条件:

    • 一个 String 属性,其值为 : @Persisted var type: String = "Point"
    • 包含经度/纬度对的列表: @Persisted private var coordinates: List<Double>

    推荐的方法是使用嵌入式对象。

    public class Location: EmbeddedObject {
      @Persisted private var coordinates: List<Double>
      @Persisted private var type: String = "Point"
    
      public var latitude: Double { return coordinates[1] }
      public var longitude: Double { return coordinates[0] }
    
      convenience init(_ latitude: Double, _ longitude: Double) {
          self.init()
          // Longitude comes first in the coordinates array of a GeoJson document
          coordinates.append(objectsIn: [longitude, latitude])
        }
      }
    

    警告

    此结构无法持久保存,只能用于构建其他地理空间形状,例如( GeoBoxGeoPolygonGeoCircle )。

    声明

    迅速

    public typealias GeoPoint = RLMGeospatialPoint
  • 表示矩形的类,可用于地理空间geoWithin查询。

    警告

    此类无法持久保存,只能在地理空间geoWithin查询中使用。

    声明

    迅速

    public typealias GeoBox = RLMGeospatialBox
  • 表示多边形的类,可用于地理空间geoWithin查询。

    GeoPolygon描述了一种由外部Polygon (称为outerRing )和 0 个或多个内部Polygon (称为holes )一致的形状,它表示外部Polygon内有无限数量的内孔。 Polygon描述由至少三个线段组成的形状,其中最后一个和第一个GeoPoint必须相同才能表示闭合多边形(这意味着至少需要 4 个点才能定义多边形)。 GeoPolygon中的内孔必须完全位于外环内部

    hole具有以下限制:

    • 孔不得交叉,即一个孔的边界不得与任何其他孔的内部和外部相交。
    • 孔不得共享边,即,如果一个孔包含边 AB,则其他孔不得包含该边。
    • 孔可以共享顶点,但任何顶点不得在单个孔中出现两次。
    • 没有一个洞是空的。
    • 只允许嵌套一次。

    警告

    此类无法持久保存,只能在地理空间geoWithin查询中使用。

    警告

    任何查询计算中均不使用海拔高度。

    声明

    迅速

    public typealias GeoPolygon = RLMGeospatialPolygon
  • 此结构是表示/转换距离的辅助函数。 它可用于地理空间查询,例如由 GeoCircle

    警告

    此结构无法持久保存,只能用于构建其他地理空间形状

    声明

    迅速

    public typealias Distance = RLMDistance
  • 表示圆形的类,可用于地理空间geoWithin查询。

    警告

    此类无法持久保存,只能在地理空间geoWithin查询中使用。

    声明

    迅速

    public typealias GeoCircle = RLMGeospatialCircle
  • 用于迁移 Realm 的迁移区块的类型。

    声明

    迅速

    public typealias MigrationBlock = @Sendable (_ migration: Migration, _ oldSchemaVersion: UInt64) -> Void

    参数

    migration

    用于执行迁移的Migration对象。 迁移对象允许您枚举和更改任何需要迁移的现有对象。

    oldSchemaVersion

    正在迁移的 Realm 的模式版本。

  • 迁移期间使用的对象类。

    声明

    迅速

    public typealias MigrationObject = DynamicObject
  • 一种区块类型,提供 Realm 中对象的旧版本和新版本。 只能使用下标访问对象属性。

    声明

    迅速

    public typealias MigrationObjectEnumerateBlock = (_ oldObject: MigrationObject?, _ newObject: MigrationObject?) -> Void

    参数

    oldObject

    原始 Realm 中的对象(只读)。

    newObject

    已迁移 Realm 中的对象(读写)。

  • Migration 实例封装了旨在促进模式迁移的信息。

    更新 Realm 的版本时, Migration实例会传递到用户定义的MigrationBlock区块中。 此实例提供对新旧数据库模式、Realm 中的对象的访问,并提供在迁移期间修改 Realm 的功能。

    声明

    迅速

    public typealias Migration = RLMMigration
  • 异步事务的 ID。

    声明

    迅速

    public typealias AsyncTransactionId = RLMAsyncTransactionId

通知

  • 修改 Realm 中的数据时出于通知目的而运行的区块的类型。

    声明

    迅速

    public typealias NotificationBlock = (_ notification: Realm.Notification, _ realm: Realm) -> Void
  • Logger 用于创建您自己的自定义日志记录逻辑。

    您可以通过创建Logger实例来定义自己的记录器,并定义在出现日志消息时调用的日志函数。

    let logger = Logger(level: .all) { level, message in
       print("Realm Log - \(level): \(message)")
    }
    

    使用Logger.shared将此自定义记录器设置为默认记录器。

       Logger.shared = inMemoryLogger
    

    注意

    默认情况下,日志阈值级别为.info ,日志字符串输出到 Apple System Logger。

    声明

    迅速

    public typealias Logger = RLMLogger