RealmKeyedCollection
public protocol RealmKeyedCollection : ThreadConfined, CustomStringConvertible, Sequence
可以检索、筛选、排序和操作的Object
的同质键值collection。
-
与此集合关联的密钥类型
声明
Swift
associatedtype Key : _MapKey
-
与此集合关联的值的类型。
声明
Swift
associatedtype Value : RealmCollectionValue
-
管理映射的 Realm,如果映射非托管,则为
nil
。声明
Swift
var realm: Realm? { get }
-
指示是否无法再访问地图。
声明
Swift
var isInvalidated: Bool { get }
-
返回此映射中键值对的数量。
声明
Swift
var count: Int { get }
-
Map 中包含的对象的人类可读描述。
声明
Swift
var description: String { get }
-
更新存储在字典中的给定键的值,如果键不存在,则添加新的键值对。
注意
注意:如果添加到字典中的值是非托管对象,而字典是托管对象,那么该非托管对象将被添加到Realm中。
警告
此方法只能在写事务(write transaction)期间调用。
参数
value
值的键路径谓词。
forKey
排序的方向。
-
仅当字典中存在给定键时,才删除该键及其关联对象。 如果键不存在,则不会修改字典。
警告
此方法只能在写事务(write transaction)期间调用。声明
Swift
func removeObject(for key: Key)
-
从字典中删除所有对象。 对象不会从管理它们的Realm中删除。
警告
此方法只能在写事务(write transaction)期间调用。声明
Swift
func removeAll()
-
返回给定键的值,或者在下标用于分配时为键设置值。
注意
注意:如果添加到字典中的值是非托管对象,而字典是托管对象,那么该非托管对象将被添加到Realm中。
注意
注意:如果为某个键分配的值为
nil
,则该键将从字典中删除。警告
此方法只能在写事务(write transaction)期间调用。
参数
key
密钥。
-
如果指定键存在于地图中,则返回其
Value
类型。请注意,使用键值编码时,键必须是字符串。
声明
Swift
func value(forKey key: String) -> AnyObject?
参数
key
所需值的属性的键。
-
如果指定键存在于地图中,则返回其
Value
类型。声明
Swift
func value(forKeyPath keyPath: String) -> AnyObject?
参数
keyPath
所需值的属性的键。
-
将给定的键值对添加到字典中,或更新给定的键(如果已存在)。
警告
只能在写事务(write transaction)期间调用此方法。
声明
Swift
func setValue(_ value: Any?, forKey key: String)
参数
value
对象值。
key
应在每个对象上设置其值的属性的名称。
-
返回一个
Results
,其中包含字典中与给定谓词匹配的所有值。注意
这将返回字典中的值,而不是键值对。
参数
predicate
用于筛选值的谓词。
-
返回一个布尔值,指示 Map 是否包含满足给定谓词的键值对
参数
where
一个闭包,用于测试给定映射的任何键对是否表示匹配项。
-
返回包含字典中对象的
Results
,但已排序。对象根据其值进行排序。 示例,要对
Date
字典进行从新到旧的排序,您可以调用dates.sorted(ascending: true)
。参数
ascending
排序的方向。
-
返回包含字典中对象的
Results
,但已排序。对象根据给定键路径的值进行排序。 示例,要根据
age
属性对Student
字典从新到旧进行排序,您可以调用students.sorted(byKeyPath: "age", ascending: true)
。警告
字典只能按布尔值、
Date
、NSDate
、单精度和双精度浮点、整数和字符串类型的属性进行排序。参数
keyPath
排序依据的键路径。
ascending
排序的方向。
-
返回包含字典中对象的
Results
,但已排序。警告
字典只能按布尔值、
Date
、NSDate
、单精度和双精度浮点、整数和字符串类型的属性进行排序。声明
Swift
func sorted<S: Sequence>(by sortDescriptors: S) -> Results<Value> where S.Iterator.Element == SortDescriptor
-
返回此字典中的所有键。
声明
Swift
var keys: [Key] { get }
-
返回字典中的所有值。
声明
Swift
var values: [Value] { get }
-
返回集合中所有对象中给定属性的最小值,如果字典为空,则返回
nil
。警告
只能指定类型符合
MinMaxType
协议的属性。声明
Swift
func min<T>(ofProperty property: String) -> T? where T : MinMaxType
参数
property
所需最小值的属性名称。
-
返回字典中所有对象中给定属性的最大值,如果字典为空,则返回
nil
。警告
只能指定类型符合
MinMaxType
协议的属性。声明
Swift
func max<T>(ofProperty property: String) -> T? where T : MinMaxType
参数
property
所需最小值的属性名称。
-
返回字典中对象的给定属性的总和,如果字典为空,则返回
nil
。警告
只能使用符合
AddableType
协议的类型的属性名称。声明
Swift
func sum<T>(ofProperty property: String) -> T where T : AddableType
参数
property
符合
AddableType
的属性名称,用于计算总和。 -
返回字典中所有对象的给定属性的平均值,如果字典为空,则返回
nil
。警告
只能指定类型符合
AddableType
协议的属性。声明
Swift
func average<T>(ofProperty property: String) -> T? where T : AddableType
参数
property
应对其值求和的属性的名称。
-
注册一个区块,以便在每次字典更改时调用。
该区块将与初始字典一起异步调用,然后在每次更改字典中任何键或值的写事务(write transaction)后再次调用。
传递给区块的
change
参数以字典中键的形式报告在每个写事务期间添加、删除或修改了哪些键值对。在调用区块时,字典将被完全评估并保持最新状态,只要您不在同一线程上执行写事务(write transaction)或显式调用
realm.refresh()
,访问它就永远不会执行阻塞工作。如果未指定队列,则将通过标准事件循环传递通知,因此当事件循环被其他活动阻塞时无法传递通知。如果给出了队列,则将通知传递到该队列。 当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括初始collection的通知。
例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务后 Realm 的状态。
let myStringMap = myObject.stringMap print("myStringMap.count: \(myStringMap?.count)") // => 0 let token = myStringMap.observe { changes in switch changes { case .initial(let myStringMap): // Will print "myStringMap.count: 1" print("myStringMap.count: \(myStringMap.count)") print("Dog Name: \(myStringMap["nameOfDog"])") // => "Rex" break case .update: // Will not be hit in this example break case .error: break } } try! realm.write { myStringMap["nameOfDog"] = "Rex" } // end of run loop execution context
只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
invalidate()
。警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。
声明
Swift
func observe(on queue: DispatchQueue?, _ block: @escaping (RealmMapChange<Self>) -> Void) -> NotificationToken
参数
queue
用于接收通知的串行调度队列。 如果为
nil
,则通知将传递到当前线程。block
发生更改时要调用的区块。
返回值
只要您希望传递更新,就必须持有的令牌。
-
如果此集合已冻结,则返回
声明
Swift
var isFrozen: Bool { get }
-
返回此collection的冻结(不可变)快照。
冻结副本是一个不可变的collection,其中包含与该collection当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。与实时集合不同,冻结集合可以从任何线程访问。
警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
在 Realm 上执行写事务(write transaction)时长时间持有冻结的 collection 可能会导致 Realm 文件过大。有关更多信息,请参阅Realm.Configuration.maximumNumberOfActiveVersions
。声明
Swift
func freeze() -> Self
-
返回此冻结collection的活动(可变)版本。
此方法解析对同一冻结collection的实时副本的引用。如果在实时collection上调用,则返回自身。
声明
Swift
func thaw() -> Self?
-
objectWillChange
扩展方法每次collection更改时发出 Void 的发布者。
尽管有这个名称,但它实际上是在collection发生更改后发出的。
声明
Swift
public var objectWillChange: RealmPublishers.WillChange<Self> { get }
-
collectionPublisher
扩展方法每次集合更改时发出集合的发布者。
声明
Swift
public var collectionPublisher: RealmPublishers.Value<Self> { get }
-
changesetPublisher
扩展方法每次集合更改时发出集合变更集的发布者。
声明
Swift
public var changesetPublisher: RealmPublishers.MapChangeset<Self> { get }
-
sum()
扩展方法返回集合中值的总和,如果集合为空,则返回
nil
。声明
Swift
func sum() -> Value
-
average()
扩展方法返回集合中所有值的平均值。
声明
Swift
func average<T>() -> T? where T : AddableType
-
sum()
扩展方法返回集合中值的总和,如果集合为空,则返回
nil
。声明
Swift
func sum() -> Value.Wrapped
-
average()
扩展方法返回集合中所有值的平均值。
声明
Swift
func average<T>() -> T? where T : AddableType
-
sorted(ascending:
默认实现) 默认实现
返回包含collection中的对象的
Results
,但已排序。对象根据其值进行排序。 例如,要对collection的
Date
进行从新到旧的排序,您可以调用dates.sorted(ascending: true)
。参数
ascending
排序的方向。
-
sorted(ascending:
默认实现) 默认实现
返回包含collection中的对象的
Results
,但已排序。对象根据其值进行排序。 例如,要对collection的
Date
进行从新到旧的排序,您可以调用dates.sorted(ascending: true)
。参数
ascending
排序的方向。