类
以下类在全球范围内可用。
-
List
是 Realm 中用于定义多个 container 关系的类型。与 Swift 的
Array
一样,List
是一种泛型类型,会根据其存储的类型进行参数化。 它可以是Object
子类或以下类型之一:Bool
、Int
、Int8
、Int16
、Int32
、Int64
、Float
、Double
、String
、Data
、Date
、Decimal128
和ObjectId
(及其可选版本)与 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
子类或以下类型之一:Bool
、Int
、Int8
、Int16
、Int32
、Int64
、Float
、Double
、String
、Data
、Date
、Decimal128
和ObjectId
(及其可选版本)与 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 是一个键值存储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 由以下部分组成:
- 一个 4 字节时间戳,用于测量自 Unix 纪元以来 ObjectId 的创建时间(以秒为单位)。
- 5 字节随机值
- 一个 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
的类型的可选值,例如Int
、Float
、Double
和Bool
。要更改
查看更多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
-
Projection
是原始 RealmObject
或EmbeddedObject
的轻量级模型。 您可以使用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.lastNameCaps
和PersonProjection.homeCity
。Collection mapping
—List
MutableSet
Object
或 的EmbeddedObject
和 可投影为原始值的collection。请参阅PersonProjection.friendsFirstName
。Exclusion
- 投影模型中未定义的原始 Realm 对象的所有属性都将从投影中排除。 对这些属性发生的任何更改都不会触发Projection
的更改通知。 您仍然可以访问原始Object
或EmbeddedObject
,并直接在其上观察通知。
查询
您可以通过调用 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
属性包含对底层包装值的线程安全引用。 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