类
以下类在全球范围内可用。
-
RLMArray
是 Realm 中用于定义多个 container 关系的类型。与
NSArray
不同,RLMArray
包含由objectClassName
属性指定的单一类型。 在这些Docs中,这称为数组的“类型”。声明
RLMArray
属性时,必须使用与其应包含的对象相同的名称将该类型标记为符合协议(请参阅RLM_COLLECTION_TYPE
宏)。 此外,可以使用 Objective-C 泛型声明该属性,以提高编译时类型安全性。RLM_COLLECTION_TYPE(ObjectType) ... @property RLMArray<ObjectType *><ObjectType> *arrayOfObjectTypes;
RLMArray
可以使用与RLMObject
和RLMResult
相同的谓词进行查询。RLMArray
s 不能直接创建。RLMArray
上的RLMObject
属性是在访问时延迟创建的,或者可以通过查询 Realm 来获取。键值观察
RLMArray
支持对RLMObject
子类上的RLMArray
属性进行数组键值观察,并且当RLMArray
附加到托管RLMObject
时,RLMArray
实例本身的invalidated
属性符合键值观察(RLMArray
非托管RLMObject
上的 永远不会失效)。由于
查看更多RLMArray
附加到它们所属的对象,因此它们不需要使用来自-mutableArrayValueForKey:
的可变collection代理对象或在包含的对象上使用与 KVC 兼容的变更方法。 相反,您可以直接在RLMArray
上调用变更方法。声明
Objective-C
@interface RLMArray<RLMObjectType> : NSObject <RLMCollection>
Swift
@_nonSendable(_assumed) class RLMArray<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
-
一个任务对象,可用于观察或取消异步打开。
当异步打开同步 Realm 时,会在调用完成回调之前从服务器下载 Realm 的最新状态。 此任务对象可用于观察下载状态或取消下载。 应该使用此选项,而不是尝试通过同步会话观察下载,因为同步会话本身是异步创建的,并且当 -[RLMKRealm asyncOpenWithConfiguration:completion:] 返回时可能还不存在。
查看更多声明
Objective-C
@interface RLMAsyncOpenTask : NSObject
Swift
@_nonSendable(_assumed) class RLMAsyncOpenTask : NSObject, @unchecked Sendable
-
RLMSortDescriptor
存储属性名称和排序顺序,以便与sortedResultsUsingDescriptors:
一起使用。 它与NSSortDescriptor
类似,但仅支持可由 Realm查询引擎高效运行的功能子集。
查看更多RLMSortDescriptor
实例不可变。声明
Objective-C
@interface RLMSortDescriptor : NSObject
Swift
@_nonSendable(_assumed) class RLMSortDescriptor : NSObject, @unchecked Sendable
-
RLMCollectionChange
对象封装有关Realm通知所报告的集合变更的信息。RLMCollectionChange
传递到在RLMArray
和RLMResults
上向-addNotificationBlock
注册的通知块,并报告自上次调用通知区块以来集合中的哪些行发生了更改。更改信息有两种格式:集合中每种更改类型的行索引的简单数组,以及请求部分中适合直接传递给
UITableView
的批量更新方法的索引路径数组。 更新名为tv
的UITableView
的完整示例:[tv beginUpdates]; [tv deleteRowsAtIndexPaths:[changes deletionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic]; [tv insertRowsAtIndexPaths:[changes insertionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic]; [tv reloadRowsAtIndexPaths:[changes modificationsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic]; [tv endUpdates];
查看更多RLMCollectionChange
中的所有数组始终按升序排序。声明
Objective-C
@interface RLMCollectionChange : NSObject
Swift
@_nonSendable(_assumed) class RLMCollectionChange : NSObject
-
128 位 IEEE 754-2008 十进制浮点数。
此类型类似于 Swift 的内置 Decimal 类型,但分配位的方式不同,从而导致可表示的范围不同。 (NS)Decimal 存储最多 38 位的有效数字和从 -128 到 127 的指数,而此类型可存储最多 34 位的有效数字和从 -6143 到 6144 的指数。
查看更多声明
Objective-C
@interface RLMDecimal128 : NSObject <NSCopying>
Swift
@_nonSendable(_assumed) class RLMDecimal128 : NSObject, NSCopying, @unchecked Sendable
-
RLMDictionary
是Realm中的一种容器类型,表示键值对的动态集合。与
NSDictionary
不同,RLMDictionary
包含单个键和值类型。 在这些Docs中,这被称为字典的“type”和“keyType”。声明
RLMDictionary
属性时,必须使用与其应包含的对象相同的名称,将对象类型和 keyType 标记为符合协议。RLM_COLLECTION_TYPE(ObjectType) ... @property RLMDictionary<NSString *, ObjectType *><RLMString, ObjectType> *objectTypeDictionary;
RLMDictionary
可以使用与RLMObject
和RLMResult
相同的谓词进行查询。RLMDictionary
s 不能直接创建。RLMDictionary
上的RLMObject
属性是在访问时延迟创建的,或者可以通过查询 Realm 来获取。RLMDictionary
仅支持NSString
作为键。 Realm 不允许在字典键中使用.
或$
字符。键值观察
查看更多RLMDictionary
支持对RLMObject
子类的RLMDictionary
属性进行字典键值观察,并且当RLMDictionary
附加到托管RLMObject
时,RLMDictionary
实例本身的invalidated
属性符合键值观察(RLMDictionary
非托管RLMObject
上的 永远不会失效)。声明
Objective-C
@interface RLMDictionary<RLMKeyType, RLMObjectType> : NSObject <RLMCollection>
Swift
@_nonSendable(_assumed) class RLMDictionary<RLMKeyType, RLMObjectType> : NSObject, RLMCollection where RLMKeyType : AnyObject, RLMObjectType : AnyObject
-
RLMDictionaryChange
对象封装有关 Realm 通知所报告的字典变更的信息。
查看更多RLMDictionaryChange
传递到在RLMDictionary
上向-addNotificationBlock
注册的通知块,并报告自上次调用通知块以来字典中的哪些键发生了更改。声明
Objective-C
@interface RLMDictionaryChange : NSObject
Swift
@_nonSendable(_assumed) class RLMDictionaryChange : NSObject
-
RLMEmbeddedObject
是用于定义 Realm 模型对象的基类。嵌入式对象的工作方式与普通对象类似,但由单个父对象(其本身可能是嵌入式对象)拥有。 与普通的顶级对象不同,嵌入式对象不能直接在 Realm 中创建或添加到 Realm 中。 相反,它们只能作为父对象的一部分创建,或者通过将非托管对象分配给父对象的属性来创建。 通过重新分配 RLMObject 属性或从包含嵌入式对象的数组中删除嵌入式对象,删除对象或将对象修改为不再指向嵌入式对象时,嵌入式对象会自动删除。
嵌入式对象只能有一个链接到它们的父对象,尝试链接到现有的托管嵌入式对象会引发异常。
RLMEmbeddedObject
支持的属性类型与RLMObject
相同,不同之处在于嵌入式对象无法链接到顶级对象,因此不支持RLMObject
和RLMArray<RLMObject>
属性(RLMEmbeddedObject
和RLMArray<RLMEmbeddedObject>
是)。嵌入式对象不能具有主键或索引属性。
查看更多声明
Objective-C
@interface RLMEmbeddedObject : RLMObjectBase <RLMThreadConfined>
Swift
@_nonSendable(_assumed) class RLMEmbeddedObject : RLMObjectBase, RLMThreadConfined
-
表示由纬度和经度值形成的点的坐标的类。
- 纬度范围介于 -90 到 90 度(含)之间。
- 经度范围介于 -180 到 180 度(含)之间。
- 高度不能为负值。
尝试创建
RLMGeospatialPoint
时,超出此范围的值将返回 nil。Realm 中的持久化地理点目前是使用鸭子类型来完成的,这意味着可以查询具有特定形状的任何模型类,就好像它包含地理位置一样。 推荐的方法是使用嵌入式对象。
警告
此结构无法持久保存,只能用于构建其他地理空间形状,例如(
RLMGeospatialBox
、RLMGeospatialPolygon
和RLMGeospatialCircle
)。警告
任何查询计算中均不使用海拔高度。
声明
Objective-C
@interface RLMGeospatialPoint : NSObject
Swift
class RLMGeospatialPoint : NSObject, @unchecked Sendable
-
声明
Objective-C
@interface RLMGeospatialBox : NSObject <RLMGeospatial>
Swift
class RLMGeospatialBox : NSObject, RLMGeospatial, @unchecked Sendable
-
表示多边形的类,可用于地理空间
geoWithin
查询。RLMGeospatialPolygon
描述了一种由外部Polygon
(称为outerRing
)和 0 个或多个内部Polygon
(称为holes
)一致的形状,它表示外部Polygon
内有无限数量的内孔。Polygon
描述由至少三个线段组成的形状,其中最后一个和第一个RLMGeospatialPoint
必须相同才能表示闭合多边形(这意味着至少需要 4 个点才能定义多边形)。RLMGeospatialPolygon
中的内孔必须完全位于外环内部hole
具有以下限制:- 孔不得交叉,即一个孔的边界不得与任何其他孔的内部和外部相交。
- 孔不得共享边,即,如果一个孔包含边 AB,则其他孔不得包含该边。
- 孔可以共享顶点,但任何顶点不得在单个孔中出现两次。
- 没有一个洞是空的。
只允许嵌套一次。
警告
此类无法持久保存,只能在地理空间
geoWithin
查询中使用。声明
Objective-C
@interface RLMGeospatialPolygon : NSObject <RLMGeospatial>
Swift
class RLMGeospatialPolygon : NSObject, RLMGeospatial, @unchecked Sendable
-
声明
Objective-C
@interface RLMDistance : NSObject
Swift
class RLMDistance : NSObject, @unchecked Sendable
-
声明
Objective-C
@interface RLMGeospatialCircle : NSObject <RLMGeospatial>
Swift
class RLMGeospatialCircle : NSObject, RLMGeospatial, @unchecked Sendable
-
RLMLogger
用于创建您自己的自定义日志记录逻辑。您可以通过创建
RLMLogger
实例来定义自己的记录器,并定义在出现日志消息时调用的日志函数。 使用setDefaultLogger
将此自定义记录器设置为默认记录器。RLMLogger.defaultLogger = [[RLMLogger alloc] initWithLevel:RLMLogLevelDebug logFunction:^(RLMLogLevel level, NSString * message) { NSLog(@"Realm Log - %lu, %@", (unsigned long)level, message); }];
注意
默认情况下,日志阈值级别为RLMLogLevelInfo
,日志字符串输出到 Apple System Logger。声明
Objective-C
@interface RLMLogger : NSObject
Swift
class RLMLogger : NSObject
-
RLMMigration
实例封装了旨在促进模式迁移的信息。更新 Realm 的版本时,
查看更多RLMMigration
实例会传递到用户定义的RLMMigrationBlock
区块中。 此实例提供对新旧数据库模式、Realm 中的对象的访问,并提供在迁移期间修改 Realm 的功能。声明
Objective-C
@interface RLMMigration : NSObject
Swift
@_nonSendable(_assumed) class RLMMigration : NSObject
-
RLMObject
是表示存储在 Realm 中的数据的模型对象的基类。通过子类化
RLMObject
并添加要托管的属性来定义模型类。 然后实例化并使用自定义子类,而不是直接使用RLMObject
类。// Dog.h @interface Dog : RLMObject @property NSString *name; @property BOOL adopted; @end // Dog.m @implementation Dog @end //none needed
支持的属性类型
NSString
NSInteger
、int
、long
、float
和double
BOOL
orbool
NSDate
NSData
NSNumber<X>
,其中X
是RLMInt
、RLMFloat
、RLMDouble
或RLMBool
之一,适用于可选数字属性RLMObject
子类,以对多对一关系进行建模。RLMArray<X>
,其中X
是RLMObject
子类,用于对多对多关系进行建模。
查询
您可以直接通过以下类方法启动查询:
allObjects
、objectsWhere:
和objectsWithPredicate:
。 这些方法可让您轻松地在自定义子类中查询默认 Realm 中该类的实例。要在默认 Realm 以外的 Realm 中进行搜索,请使用
allObjectsInRealm:
、objectsInRealm:where:
和objectsInRealm:withPredicate:
类方法。看
RLMRealm
关系
有关更多详细信息,请参阅我们的Realm Swift 文档。
键值观察
所有
RLMObject
属性(包括在子类中创建的属性)都符合键值观察,但realm
和objectSchema
除外。观察 Realm 对象时,请记住以下提示:
- 与
NSMutableArray
属性不同,RLMArray
属性不需要使用从-mutableArrayValueForKey:
返回的代理对象,也不需要在包含的类上定义 KVC 更改方法。 您只需直接调用RLMArray
上的方法即可;包含对象将自动观察到任何更改。 - 非托管
RLMObject
实例在具有任何观察到的属性时无法添加到 Realm。 - 不建议在
-observeValueForKeyPath:ofObject:change:context:
中修改托管RLMObject
。 即使 Realm 未处于写事务(write transaction)中(例如,在不同线程上进行更改后调用-[RLMRealm refresh]
时)以及在应用更改之前发送的通知(使用NSKeyValueObservingOptionPrior
时),属性也可能会发生变化可能会在您无法开始写事务(write transaction)时发送。
声明
Objective-C
@interface RLMObject : RLMObjectBase <RLMThreadConfined>
Swift
@_nonSendable(_assumed) class RLMObject : RLMObjectBase, RLMThreadConfined
-
声明
Objective-C
@interface RLMPropertyChange : NSObject
Swift
@_nonSendable(_assumed) class RLMPropertyChange : NSObject
-
一个(可能)12 字节的唯一ObjectId。
ObjectId 类似于 GUID 或 UUID,可用于唯一标识对象,而无需集中式 ID 生成器。 ObjectID 由以下部分组成:
- 一个 4 字节时间戳,用于测量自 Unix 纪元以来 ObjectId 的创建时间(以秒为单位)。
- 5 字节随机值
- 一个 3 字节计数器,初始化为随机值。
ObjectId 旨在快速生成。 按 ObjectId 字段排序通常会导致对象按创建顺序排序。
查看更多声明
Objective-C
@interface RLMObjectId : NSObject <NSCopying>
Swift
@_nonSendable(_assumed) class RLMObjectId : NSObject, NSCopying, @unchecked Sendable
-
声明
Objective-C
@interface RLMObjectSchema : NSObject <NSCopying>
Swift
@_nonSendable(_assumed) class RLMObjectSchema : NSObject, NSCopying, @unchecked Sendable
-
RLMProperty
实例表示由对象模式上下文中的 Realm 托管的属性。此类属性可能会持久保存在 Realm 文件中,也可能会根据 Realm 中的其他数据进行计算。使用 Realm 时,
RLMProperty
实例允许执行迁移和内省数据库模式。这些属性实例映射到核心数据库中的列。
查看更多声明
Objective-C
@interface RLMProperty : NSObject
Swift
@_nonSendable(_assumed) class RLMProperty : NSObject, @unchecked Sendable
-
查看更多RLMPropertyDescriptor
实例表示给定类的特定属性。声明
Objective-C
@interface RLMPropertyDescriptor : NSObject
Swift
@_nonSendable(_assumed) class RLMPropertyDescriptor : NSObject, @unchecked Sendable
-
一个
RLMRealm
实例(也称为“Realm”)代表一个 Realm 数据库。Realm 可以存储在磁盘上(请参阅
+[RLMRealm realmWithURL:]
)或内存中(请参阅RLMRealmConfiguration
)。RLMRealm
实例在内部缓存,并且在事件循环的单次迭代内的单个线程上多次构造等效的RLMRealm
对象(例如,通过使用相同的路径或标识符)通常会返回相同的RLMRealm
对象。如果您特别想要确保销毁一个
RLMRealm
实例(例如,如果您想打开一个 Realm,检查某些属性,然后可能删除该 Realm 文件并重新打开它),请将使用 Realm 文件的代码放在@autoreleasepool {}
内,并确保没有其他强引用对其进行强引用。警告
未冻结的RLMRealm
实例受线程限制,不能跨线程或调度队列共享。 尝试这样做会导致抛出异常。 您必须在要与 Realm 交互的每个线程上调用此方法。 对于调度队列,这意味着您必须在每个调度的区块中调用它,因为不能保证队列在同一线程上运行其所有区块。声明
Objective-C
@interface RLMRealm : NSObject
Swift
@_nonSendable(_assumed) class RLMRealm : NSObject
-
订阅Realm变更的方法返回的令牌。
Realm 中的变更订阅会返回一个
查看更多RLMNotificationToken
实例,可用于取消订阅变更。 只要想继续接收通知,就必须存储对该令牌的强引用。 如果您希望停止,请调用-invalidate
方法。 如果令牌被释放,通知也会停止。声明
Objective-C
@interface RLMNotificationToken : NSObject
Swift
@_nonSendable(_assumed) class RLMNotificationToken : NSObject, @unchecked Sendable
-
RLMRealmConfiguration
实例描述了用于创建 Realm 实例的不同选项。RLMRealmConfiguration
实例只是普通的NSObject
。 与RLMRealm
和RLMObject
不同,只要不改变它们,它们就可以在线程之间自由共享。为类子集创建配置对象(通过设置
查看更多objectClasses
属性)的成本可能很高。 因此,您通常希望为每个不同的配置缓存和重用单个配置对象,而不是在每次打开 Realm 时都创建一个新对象。声明
Objective-C
@interface RLMRealmConfiguration : NSObject <NSCopying>
Swift
@_nonSendable(_assumed) class RLMRealmConfiguration : NSObject, NSCopying
-
RLMResults
是 Realm 中从对象查询返回的自动更新container类型。它以collection的形式表示查询的结果。RLMResults
可以使用与RLMObject
和RLMArray
相同的谓词进行查询,并且可以链式查询以进一步筛选结果。RLMResults
始终反映当前线程上的 Realm 的当前状态,包括在当前线程上的写事务(write transaction)期间。唯一的例外是使用for...in
快速枚举时,该枚举将始终枚举开始枚举时与查询匹配的对象,即使其中一些对象在枚举期间被删除或修改为被筛选器排除。RLMResults
首次访问时延迟求值;它们仅在请求查询结果时才运行查询。 这意味着链接多个临时RLMResults
来对数据进行排序和筛选不会执行任何处理中间状态的额外工作。评估结果或添加通知块后,系统会立即使结果保持最新,并尽可能在背景线程上完成保持最新的工作。
查看更多RLMResults
不能直接实例化。声明
Objective-C
@interface RLMResults<RLMObjectType> : NSObject <RLMCollection, NSFastEnumeration>
Swift
@_nonSendable(_assumed) class RLMResults<RLMObjectType> : NSObject, RLMCollection, NSFastEnumeration where RLMObjectType : AnyObject
-
RLMLinkingObjects
是一种自动更新的容器类型。 它表示链接到其父对象的对象集合。有关更多信息,请参阅文档中的“反向关系”部分。
声明
Objective-C
@interface RLMLinkingObjects<RLMObjectType : RLMObject *> : RLMResults
Swift
@_nonSendable(_assumed) class RLMLinkingObjects<RLMObjectType> : RLMResults<AnyObject> where RLMObjectType : RLMObject
-
RLMSchema
实例表示由 Realm 托管的对象模式的collection。使用 Realm 时,
RLMSchema
实例允许执行迁移和内省数据库模式。模式映射到核心数据库中的collection。
查看更多声明
Objective-C
@interface RLMSchema : NSObject <NSCopying>
Swift
@_nonSendable(_assumed) class RLMSchema : NSObject, NSCopying, @unchecked Sendable
-
RLMSectionedResultsChange
对象封装有关 Realm 通知报告的分段结果变更的信息。RLMSectionedResultsChange
传递到在RLMSectionedResults
上向-addNotificationBlock
注册的通知块,并报告自上次调用通知块以来集合中的哪些部分和行发生了更改。更新名为
tv
的UITableView
的完整示例:[tv beginUpdates]; [tv deleteRowsAtIndexPaths:changes.deletions withRowAnimation:UITableViewRowAnimationAutomatic]; [tv insertRowsAtIndexPaths:changes.insertions withRowAnimation:UITableViewRowAnimationAutomatic]; [tv reloadRowsAtIndexPaths:changes.modifications withRowAnimation:UITableViewRowAnimationAutomatic]; [tv insertSections:changes.sectionsToInsert withRowAnimation:UITableViewRowAnimationAutomatic]; [tv deleteSections:changes.sectionsToRemove withRowAnimation:UITableViewRowAnimationAutomatic]; [tv endUpdates];
查看更多RLMSectionedResultsChange
中的所有数组始终按升序排序。声明
Objective-C
@interface RLMSectionedResultsChange : NSObject
Swift
@_nonSendable(_assumed) class RLMSectionedResultsChange : NSObject
-
RLMSection 包含属于指定节键的对象。
查看更多声明
Objective-C
@interface RLMSection<RLMKeyType : id <RLMValue>, RLMObjectType> : NSObject <RLMSectionedResult>
Swift
@_nonSendable(_assumed) class RLMSection<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : AnyObject
-
一种延迟评估的集合,其中包含由部分键确定的部分中的元素。
查看更多声明
Objective-C
@interface RLMSectionedResults<RLMKeyType : id <RLMValue>, RLMObjectType : id <RLMValue>> : NSObject <RLMSectionedResult>
Swift
@_nonSendable(_assumed) class RLMSectionedResults<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : RLMValue
-
声明
Objective-C
@interface RLMSet<RLMObjectType> : NSObject <RLMCollection>
Swift
@_nonSendable(_assumed) class RLMSet<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
-
要在线程之间传递的对象,其中包含对其线程限制对象的线程安全引用。
要在不同线程上解析目标 Realm 的线程安全引用,请传递给
-[RLMRealm resolveThreadSafeReference:]
。警告
RLMThreadSafeReference
对象最多必须解析一次。 无法解析RLMThreadSafeReference
将导致 Realm 的源版本被固定,直到引用被解除分配。注意
首选短期
RLMThreadSafeReference
,因为源 Realm 版本的数据将保留,直到所有引用都已解析或解除分配。声明
Objective-C
@interface RLMThreadSafeReference<__covariant Confined : id <RLMThreadConfined>> : NSObject
Swift
@_nonSendable(_assumed) class RLMThreadSafeReference<Confined> : NSObject, @unchecked Sendable where Confined : RLMThreadConfined