Field

public struct Field<T>

Field represents a field extractor for database entries returned by the server.

For example:

let nameField = Field<String>("data", "name")

let user = try! client.query(
    Get(
        Ref("classes/user/42")
    )
).await(timeout: .now() + 5)

let userName = user.get(field: nameField)

Every field has a path which is composed by a sequence of segments. A segment can be:

  • String: when the desired field is contained in an object in which the segment will be used as the object key;
  • Int: when the desired field is contained in an array in which the segment will be used as the array index.

Rules for field extraction and data conversion:

  • If the field is not present, it returns nil;
  • If the field can’t be converted to the expected type, it throws an exception. E.g.: Field<String>("data", "name") expects the name field to be a String. If the end result is not a String, it will fail;
  • If the path assumes a type that is not correct, it throws an exception. E.g.: Field<String>("data", "name") expects the target value to contain a nested object at the key data in which there should be a String field at the key name. If data field is not an object, it will fail.
  • Initializes a new field extractor with a path containing the provided path segments.

    Declaration

    Swift

    public init(_ segments: Segment...)
  • Converts an array of path segments into a field extractor.

    Declaration

    Swift

    public init(path segments: [Segment])
  • Creates a new nested field extractor based on its parent’s path.

    Declaration

    Swift

    public func at(_ segments: Segment...) -> Field
  • Creates a new nested field extractor based on its parent’s path.

    Declaration

    Swift

    public func at(path segments: [Segment]) -> Field
  • Combine two field extractors to create a nested field.

    Declaration

    Swift

    public func at<A>(field: Field<A>) -> Field<A>
  • Combine two field extractors to create a nested array field.

    Declaration

    Swift

    public func get<A>(asArrayOf field: Field<A>) -> Field<[A]>
  • Combine two field extractors to create a nested object field.

    Declaration

    Swift

    public func get<A>(asDictionaryOf field: Field<A>) -> Field<[String: A]>
  • Creates a new field by mapping the result of its parent’s extracted value.

    Declaration

    Swift

    public func map<A>(_ transform: @escaping (T) throws -> A) -> Field<A>
  • Creates a new field by flat mapping the result of its parent’s extracted value.

    Declaration

    Swift

    public func flatMap<A>(_ transform: @escaping (T) throws -> A?) -> Field<A>