查询

@dynamicMemberLookup
public struct Query<T>

Query 是用于创建类型安全查询谓词的类。

使用Query ,您具有创建 Swift 风格的查询表达式的能力,然后将其构造到NSPredicate中。Query类不应直接实例化,而应仅用作将查询表达式作为参数的闭包中的参数。 示例:

public func where(_ query: ((Query<Element>) -> Query<Element>)) -> Results<Element>

然后,您可以像这样使用上述函数:

let results = realm.objects(Person.self).query {
   $0.name == "Foo" || $0.name == "Bar" && $0.age >= 21
}

支持的谓词类型

Prefix

  • not ! swift let results = realm.objects(Person.self).query { !$0.dogsName.contains("Fido") || !$0.name.contains("Foo") }

比较

  • Equals ==
  • 不等于 !=
  • 大于 >
  • 小于 <
  • GreaterThanOrEqual >=
  • LessThanOrEqual <=
  • between .contains(_ range:)

集合

  • 登录 .contains(_ element:)
  • between .contains(_ range:)

Map

  • @allKeys .keys
  • @allValues .values

多个子句

  • &&
  • ||

collection聚合

  • @avg .avg
  • @min .min
  • @max .max
  • @sum .sum
  • @count .count swift let results = realm.objects(Person.self).query { !$0.dogs.age.avg >= 0 || !$0.dogsAgesArray.avg >= 0 }

其他

  • not !
  • subquery ($0.fooList.intCol >= 5).count > n

登录

  • 检查该值是否存在于collection中。

    声明

    Swift

    public func `in`<U>(_ collection: U) -> Query<Bool> where T == U.Element, U : Sequence

查询构造

T == AnyRealmValue的情况下可用

适用于以下位置: TRealmCollection

  • 查询collection中的对象的计数。

    声明

    Swift

    public var count: Query<Int> { get }
  • 检查此collection中是否存在元素。

    声明

    Swift

    public func contains(_ value: T.Element) -> Query<Bool>
  • 检查给定数组中包含的任何元素是否存在于collection中。

    声明

    Swift

    public func containsAny<U>(in collection: U) -> Query<Bool> where U : Sequence, T.Element == U.Element

T : RealmCollectionT.Element : Comparable的情况下可用

  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: Range<T.Element>) -> Query<Bool>
  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: ClosedRange<T.Element>) -> Query<Bool>

在以下情况下可用: T : RealmCollectionT.Element : OptionalProtocolT.Element.Wrapped : Comparable

  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: Range<T.Element.Wrapped>) -> Query<Bool>
  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: ClosedRange<T.Element.Wrapped>) -> Query<Bool>

T : RealmCollectionT.Element.PersistedType : _QueryNumeric的情况下可用

  • min

    返回collection中的最小值。

    声明

    Swift

    public var min: Query<T.Element> { get }
  • max

    返回collection中的最大值。

    声明

    Swift

    public var max: Query<T.Element> { get }
  • avg

    返回collection中的平均值。

    声明

    Swift

    public var avg: Query<T.Element> { get }
  • sum

    返回collection中所有值的总和。

    声明

    Swift

    public var sum: Query<T.Element> { get }

适用于以下位置: TRealmKeyedCollection

  • 检查给定数组中包含的任何元素是否存在于地图的值中。

    声明

    Swift

    public func containsAny<U>(in collection: U) -> Query<Bool> where U : Sequence, T.Value == U.Element
  • 检查此collection中是否存在元素。

    声明

    Swift

    public func contains(_ value: T.Value) -> Query<Bool>
  • 允许查询 Map 中的所有值。

    声明

    Swift

    public var values: Query<T.Value> { get }

T的情况下可用: RealmKeyedCollection , T.Key == String

T : RealmKeyedCollectionT.Value : Comparable的情况下可用

  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: Range<T.Value>) -> Query<Bool>
  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: ClosedRange<T.Value>) -> Query<Bool>

在以下情况下可用: T : RealmKeyedCollectionT.Value : OptionalProtocolT.Value.Wrapped : Comparable

  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: Range<T.Value.Wrapped>) -> Query<Bool>
  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: ClosedRange<T.Value.Wrapped>) -> Query<Bool>

T : RealmKeyedCollectionT.Value.PersistedType : _QueryNumeric的情况下可用

  • min

    返回键控collection中的最小值。

    声明

    Swift

    public var min: Query<T.Value> { get }
  • max

    返回键控collection中的最大值。

    声明

    Swift

    public var max: Query<T.Value> { get }
  • avg

    返回键控集合中的平均值。

    声明

    Swift

    public var avg: Query<T.Value> { get }
  • sum

    返回键控collection中所有值的总和。

    声明

    Swift

    public var sum: Query<T.Value> { get }

适用于以下位置: TRealmKeyedCollection

  • 返回键控collection中所有值的计数。

    声明

    Swift

    public var count: Query<Int> { get }

T : PersistableEnumT.RawValue : _RealmSchemaDiscoverable的情况下可用

  • 对枚举的原始值而不是枚举本身进行查询。

    这可用于编写可以在 RawValue 但不能在枚举上表示的查询。 例如,您可以在字符串枚举上查询.starts(with:) ,其中前缀不是枚举的成员。

    声明

    Swift

    public var rawValue: Query<T.RawValue> { get }

在以下情况下可用: T : OptionalProtocolT.Wrapped : PersistableEnumT.Wrapped.RawValue : _RealmSchemaDiscoverable

  • 对枚举的原始值而不是枚举本身进行查询。

    这可用于编写可以在 RawValue 但不能在枚举上表示的查询。 例如,您可以在字符串枚举上查询.starts(with:) ,其中前缀不是枚举的成员。

    声明

    Swift

    public var rawValue: Query<T.Wrapped.RawValue?> { get }

在以下情况下可用: T : RealmCollectionT.Element : PersistableEnumT.Element.RawValue : RealmCollectionValue

  • 对collection中枚举的原始值而不是枚举本身进行查询。

    这可用于编写可以在 RawValue 但不能在枚举上表示的查询。 例如,您可以在字符串枚举上查询.starts(with:) ,其中前缀不是枚举的成员。

    声明

    Swift

    public var rawValue: Query<AnyRealmCollection<T.Element.RawValue>> { get }

在以下情况下可用: T : RealmKeyedCollectionT.Value : PersistableEnumT.Value.RawValue : RealmCollectionValue

  • 对collection中枚举的原始值而不是枚举本身进行查询。

    这可用于编写可以在 RawValue 但不能在枚举上表示的查询。 例如,您可以在字符串枚举上查询.starts(with:) ,其中前缀不是枚举的成员。

    声明

    Swift

    public var rawValue: Query<Map<T.Key, T.Value.RawValue>> { get }

在以下情况下可用: T : RealmCollectionT.Element : OptionalProtocolT.Element.Wrapped : PersistableEnumT.Element.Wrapped.RawValue : _RealmCollectionValueInsideOptional

  • 对collection中枚举的原始值而不是枚举本身进行查询。

    这可用于编写可以在 RawValue 但不能在枚举上表示的查询。 例如,您可以在字符串枚举上查询.starts(with:) ,其中前缀不是枚举的成员。

    声明

    Swift

    public var rawValue: Query<AnyRealmCollection<T.Element.Wrapped.RawValue?>> { get }

在以下情况下可用: T : RealmKeyedCollectionT.Value : OptionalProtocolT.Value.Wrapped : PersistableEnumT.Value.Wrapped.RawValue : _RealmCollectionValueInsideOptional

  • 对collection中枚举的原始值而不是枚举本身进行查询。

    这可用于编写可以在 RawValue 但不能在枚举上表示的查询。 例如,您可以在字符串枚举上查询.starts(with:) ,其中前缀不是枚举的成员。

    声明

    Swift

    public var rawValue: Query<Map<T.Key, T.Value.Wrapped.RawValue?>> { get }

适用于以下位置: T_HasPersistedType

  • 查询值的persistableValue,而不是值本身。

    这可用于编写可在持久化类型上表示但不能在类型本身上表示的查询,例如对可持久化值的范围查询,或查询无法转换为映射类型的值。

    对于不符合 PersistableEnum、CustomPersistable 或 FailableCustomPersistable 的类型,这不会执行任何有用的操作。

    声明

    Swift

    public var persistableValue: Query<T.PersistedType> { get }

适用于以下位置: TRealmCollection

  • Query在collection中值的persistableValue,而不是值本身。

    这可用于编写可在持久化类型上表示但不能在类型本身上表示的查询,例如对可持久化值的范围查询,或查询无法转换为映射类型的值。

    对于不符合 PersistableEnum、CustomPersistable 或 FailableCustomPersistable 的类型,这不会执行任何有用的操作。

    声明

    Swift

    public var persistableValue: Query<AnyRealmCollection<T.Element.PersistedType>> { get }

适用于以下位置: TRealmKeyedCollection

  • Query在collection中值的persistableValue,而不是值本身。

    这可用于编写可在持久化类型上表示但不能在类型本身上表示的查询,例如对可持久化值的范围查询,或查询无法转换为映射类型的值。

    对于不符合 PersistableEnum、CustomPersistable 或 FailableCustomPersistable 的类型,这不会执行任何有用的操作。

    声明

    Swift

    public var persistableValue: Query<Map<T.Key, T.Value.PersistedType>> { get }

适用于以下位置: TComparable

  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: Range<T>) -> Query<Bool>
  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: ClosedRange<T>) -> Query<Bool>

T : _HasPersistedTypeT.PersistedType : _QueryString的情况下可用

  • 检查此collection中是否存在等于给定值的所有元素。?*可用作通配符,其中?匹配 1 个字符, *匹配 0 个或多个字符。

    声明

    Swift

    public func like(_ value: T, caseInsensitive: Bool = false) -> Query<Bool>

    参数

    value

    使用的值。

    caseInsensitive

    true 如果是不区分大小写的搜索。

  • 检查此collection中是否存在等于给定值的所有元素。?*可用作通配符,其中?匹配 1 个字符, *匹配 0 个或多个字符。

    声明

    Swift

    public func like<U>(_ column: Query<U>, caseInsensitive: Bool = false) -> Query<Bool>

    参数

    value

    使用的值。

    caseInsensitive

    true 如果是不区分大小写的搜索。

T : _HasPersistedTypeT.PersistedType : _QueryBinary的情况下可用

  • 检查此collection中是否存在包含给定值的所有元素。

    声明

    Swift

    public func contains(_ value: T, options: StringOptions = []) -> Query<Bool>

    参数

    value

    使用的值。

    options

    用于评估搜索查询的选项集。

  • 比较此列是否包含另一列中的值。

    声明

    Swift

    public func contains<U>(_ column: Query<U>, options: StringOptions = []) -> Query<Bool> where U : _Persistable, U.PersistedType : _QueryBinary

    参数

    column

    另一列。

    options

    用于评估搜索查询的选项集。

  • 检查此collection中是否存在以给定值开头的所有元素。

    声明

    Swift

    public func starts(with value: T, options: StringOptions = []) -> Query<Bool>

    参数

    value

    使用的值。

    options

    用于评估搜索查询的选项集。

  • 比较此列与另一列中的值的开头。

    声明

    Swift

    public func starts<U>(with column: Query<U>, options: StringOptions = []) -> Query<Bool>

    参数

    column

    另一列。

    options

    用于评估搜索查询的选项集。

  • 检查此collection中是否存在以给定值结尾的所有元素。

    声明

    Swift

    public func ends(with value: T, options: StringOptions = []) -> Query<Bool>

    参数

    value

    使用的值。

    options

    用于评估搜索查询的选项集。

  • 比较此列与另一列中的值的结尾。

    声明

    Swift

    public func ends<U>(with column: Query<U>, options: StringOptions = []) -> Query<Bool>

    参数

    column

    另一列。

    options

    用于评估搜索查询的选项集。

  • 检查此collection中是否存在等于给定值的所有元素。

    声明

    Swift

    public func equals(_ value: T, options: StringOptions = []) -> Query<Bool>

    参数

    value

    使用的值。

    options

    用于评估搜索查询的选项集。

  • 比较此列是否等于另一给定列中的值。

    声明

    Swift

    public func equals<U>(_ column: Query<U>, options: StringOptions = []) -> Query<Bool>

    参数

    column

    另一列。

    options

    用于评估搜索查询的选项集。

  • 检查此collection中是否存在不等于给定值的所有元素。

    声明

    Swift

    public func notEquals(_ value: T, options: StringOptions = []) -> Query<Bool>

    参数

    value

    使用的值。

    options

    用于评估搜索查询的选项集。

  • 比较此列是否等于另一给定列中的值。

    声明

    Swift

    public func notEquals<U>(_ column: Query<U>, options: StringOptions = []) -> Query<Bool>

    参数

    column

    另一列。

    options

    用于评估搜索查询的选项集。

T : OptionalProtocolT.Wrapped : Comparable的情况下可用

  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: Range<T.Wrapped>) -> Query<Bool>
  • 检查此collection中是否存在给定范围内的所有元素。

    声明

    Swift

    public func contains(_ range: ClosedRange<T.Wrapped>) -> Query<Bool>

T == Bool的情况下可用

  • 完成子查询表达式。

    • 用法: (($0.myCollection.age >= 21) && ($0.myCollection.siblings == 4))).count >= 5

    注意

    请勿在子查询表达式中混合使用collection。每个子查询只允许引用一个collection。

    声明

    Swift

    public var count: Query<Int> { get }

T : _HasPersistedTypeT.PersistedType : _QueryNumeric的情况下可用

  • min

    根据键路径返回collection中对象的最小值。

    声明

    Swift

    public var min: Query { get }
  • max

    根据键路径返回collection中对象的最大值。

    声明

    Swift

    public var max: Query { get }
  • avg

    根据键路径返回collection中的对象的平均值。

    声明

    Swift

    public var avg: Query { get }
  • sum

    根据键路径返回collection中的对象的总和。

    声明

    Swift

    public var sum: Query { get }

T : OptionalProtocolT.Wrapped : EmbeddedObject的情况下可用

  • 使用geoWithin函数,通过地理空间形状( GeoBoxGeoPolygonGeoCircle )筛选位置点位于特定区域内的对象。

    注意

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

    GeoPoint

    声明

    Swift

    func geoWithin<U>(_ value: U) -> Query<Bool> where U : RLMGeospatial