# From

    public struct From<O> where O : DynamicObject

    extension From: CustomDebugStringConvertible, CoreStoreDebugStringConvertible

A `From` clause specifies the source entity and source persistent store for fetch and query methods. A common usage is to just indicate the entity:

    let person = transaction.fetchOne(From<Person>())

For cases where multiple `NSPersistentStore`s contain the same entity, the source configuration’s name needs to be specified as well:

    let person = transaction.fetchOne(From<Person>("Configuration1"))

- `entityClass`

  The associated `NSManagedObject` or `CoreStoreObject` entity class

  #### Declaration

  Swift

      public let entityClass: O.Type

- `configurations`

  The `NSPersistentStore` configuration names to associate objects from. May contain `String`s to pertain to named configurations, or `nil` to pertain to the default configuration

  #### Declaration

  Swift

      public let configurations: [ModelConfiguration]?

- `init()`

  Initializes a `From` clause.

      let people = transaction.fetchAll(From<MyPersonEntity>())

  #### Declaration

  Swift

      public init()

- `init(_:)`

  Initializes a `From` clause with the specified entity type.

      let people = transaction.fetchAll(From<MyPersonEntity>())

  #### Declaration

  Swift

      public init(_ entity: O.Type)

  #### Parameters

  `entity` | the associated `NSManagedObject` or `CoreStoreObject` type

- `init(_:_:)`

  Initializes a `From` clause with the specified configurations.

      let people = transaction.fetchAll(From<MyPersonEntity>(nil, "Configuration1"))

  #### Declaration

  Swift

      public init(_ configuration: ModelConfiguration, _ otherConfigurations: ModelConfiguration...)

  #### Parameters

  `configuration` | the `NSPersistentStore` configuration name to associate objects from. This parameter is required if multiple configurations contain the created `NSManagedObject` or `CoreStoreObject`‘s entity type. Set to `nil` to use the default configuration.
  `otherConfigurations` | an optional list of other configuration names to associate objects from (see `configuration` parameter)

- `init(_:)`

  Initializes a `From` clause with the specified configurations.

      let people = transaction.fetchAll(From<MyPersonEntity>(["Configuration1", "Configuration2"]))

  #### Declaration

  Swift

      public init(_ configurations: [ModelConfiguration])

  #### Parameters

  `configurations` | a list of `NSPersistentStore` configuration names to associate objects from. This parameter is required if multiple configurations contain the created `NSManagedObject` or `CoreStoreObject`‘s entity type. Set to `nil` to use the default configuration.

- `init(_:_:_:)`

  Initializes a `From` clause with the specified configurations.

      let people = transaction.fetchAll(From(MyPersonEntity.self, nil, "Configuration1"))

  #### Declaration

  Swift

      public init(_ entity: O.Type, _ configuration: ModelConfiguration, _ otherConfigurations: ModelConfiguration...)

  #### Parameters

  `entity` | the associated `NSManagedObject` or `CoreStoreObject` type
  `configuration` | the `NSPersistentStore` configuration name to associate objects from. This parameter is required if multiple configurations contain the created `NSManagedObject` or `CoreStoreObject`‘s entity type. Set to `nil` to use the default configuration.
  `otherConfigurations` | an optional list of other configuration names to associate objects from (see `configuration` parameter)

- `init(_:_:)`

  Initializes a `From` clause with the specified configurations.

      let people = transaction.fetchAll(From(MyPersonEntity.self, ["Configuration1", "Configuration1"]))

  #### Declaration

  Swift

      public init(_ entity: O.Type, _ configurations: [ModelConfiguration])

  #### Parameters

  `entity` | the associated `NSManagedObject` or `CoreStoreObject` type
  `configurations` | a list of `NSPersistentStore` configuration names to associate objects from. This parameter is required if multiple configurations contain the created `NSManagedObject` or `CoreStoreObject`‘s entity type. Set to `nil` to use the default configuration.

### CustomDebugStringConvertible

- `debugDescription`

  #### Declaration

  Swift

      public var debugDescription: String { get }

### From

- `where(_:)`

  Creates a `FetchChainBuilder` that starts with the specified `Where` clause

  #### Declaration

  Swift

      public func `where`(_ clause: Where<O>) -> FetchChainBuilder<O>

  #### Parameters

  `clause` | the `Where` clause to create a `FetchChainBuilder` with

  #### Return Value

  a `FetchChainBuilder` that starts with the specified `Where` clause

- `where(combineByAnd:)`

  Creates a `FetchChainBuilder` that `AND`s the specified `Where` clauses. Use this overload if the compiler cannot infer the types when chaining multiple `&&` operators.

  #### Declaration

  Swift

      public func `where`(combineByAnd clauses: Where<O>...) -> FetchChainBuilder<O>

  #### Parameters

  `clauses` | the `Where` clauses to create a `FetchChainBuilder` with

  #### Return Value

  a `FetchChainBuilder` that `AND`s the specified `Where` clauses

- `where(combineByOr:)`

  Creates a `FetchChainBuilder` that `OR`s the specified `Where` clauses. Use this overload if the compiler cannot infer the types when chaining multiple `||` operators.

  #### Declaration

  Swift

      public func `where`(combineByOr clauses: Where<O>...) -> FetchChainBuilder<O>

  #### Parameters

  `clauses` | the `Where` clauses to create a `FetchChainBuilder` with

  #### Return Value

  a `FetchChainBuilder` that `OR`s the specified `Where` clauses

- `where(format:_:)`

  Creates a `FetchChainBuilder` with a predicate using the specified string format and arguments

  #### Declaration

  Swift

      public func `where`(
          format: String,
          _ args: Any...
      ) -> FetchChainBuilder<O>

  #### Parameters

  `format` | the format string for the predicate
  `args` | the arguments for `format`

  #### Return Value

  a `FetchChainBuilder` with a predicate using the specified string format and arguments

- `where(format:argumentArray:)`

  Creates a `FetchChainBuilder` with a predicate using the specified string format and arguments

  #### Declaration

  Swift

      public func `where`(
          format: String,
          argumentArray: [Any]?
      ) -> FetchChainBuilder<O>

  #### Parameters

  `format` | the format string for the predicate
  `argumentArray` | the arguments for `format`

  #### Return Value

  a `FetchChainBuilder` with a predicate using the specified string format and arguments

- `orderBy(_:)`

  Creates a `FetchChainBuilder` that starts with the specified `OrderBy` clause.

  #### Declaration

  Swift

      public func orderBy(_ clause: OrderBy<O>) -> FetchChainBuilder<O>

  #### Parameters

  `clause` | the `OrderBy` clause to create a `FetchChainBuilder` with

  #### Return Value

  a `FetchChainBuilder` that starts with the specified `OrderBy` clause

- `orderBy(_:_:)`

  Creates a `FetchChainBuilder` with a series of `SortKey`s

  #### Declaration

  Swift

      public func orderBy(
          _ sortKey: OrderBy<O>.SortKey,
          _ sortKeys: OrderBy<O>.SortKey...
      ) -> FetchChainBuilder<O>

  #### Parameters

  `sortKey` | a single `SortKey`
  `sortKeys` | a series of other `SortKey`s

  #### Return Value

  a `FetchChainBuilder` with a series of `SortKey`s

- `orderBy(_:)`

  Creates a `FetchChainBuilder` with a series of `SortKey`s

  #### Declaration

  Swift

      public func orderBy(_ sortKeys: [OrderBy<O>.SortKey]) -> FetchChainBuilder<O>

  #### Parameters

  `sortKeys` | a series of `SortKey`s

  #### Return Value

  a `FetchChainBuilder` with a series of `SortKey`s

- `tweak(_:)`

  Creates a `FetchChainBuilder` with a closure where the `NSFetchRequest` may be configured

  #### Declaration

  Swift

      public func tweak(_ fetchRequest: @escaping (NSFetchRequest<NSFetchRequestResult>) -> Void) -> FetchChainBuilder<O>

  #### Parameters

  `fetchRequest` | the block to customize the `NSFetchRequest`

  #### Return Value

  a `FetchChainBuilder` with closure where the `NSFetchRequest` may be configured

- `appending(_:)`

  Creates a `FetchChainBuilder` and immediately appending a `FetchClause`

  #### Declaration

  Swift

      public func appending(_ clause: FetchClause) -> FetchChainBuilder<O>

  #### Parameters

  `clause` | the `FetchClause` to add to the `FetchChainBuilder`

  #### Return Value

  a `FetchChainBuilder` containing the specified `FetchClause`

- `appending(contentsOf:)`

  Creates a `FetchChainBuilder` and immediately appending a series of `FetchClause`s

  #### Declaration

  Swift

      public func appending<S>(contentsOf clauses: S) -> FetchChainBuilder<O> where S : Sequence, S.Element == FetchClause

  #### Parameters

  `clauses` | the `FetchClause`s to add to the `FetchChainBuilder`

  #### Return Value

  a `FetchChainBuilder` containing the specified `FetchClause`s

- `select(_:)`

  Creates a `QueryChainBuilder` that starts with the specified `Select` clause

  #### Declaration

  Swift

      public func select<R>(_ clause: Select<O, R>) -> QueryChainBuilder<O, R> where R : SelectResultType

  #### Parameters

  `clause` | the `Select` clause to create a `QueryChainBuilder` with

  #### Return Value

  a `QueryChainBuilder` that starts with the specified `Select` clause

- `select(_:_:_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified `SelectTerm`s

  #### Declaration

  Swift

      public func select<R>(
          _ resultType: R.Type,
          _ selectTerm: SelectTerm<O>,
          _ selectTerms: SelectTerm<O>...
      ) -> QueryChainBuilder<O, R>

  #### Parameters

  `resultType` | the generic `SelectResultType` for the `Select` clause
  `selectTerm` | a `SelectTerm`
  `selectTerms` | a series of `SelectTerm`s

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified `SelectTerm`s

- `select(_:_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified `SelectTerm`s

  #### Declaration

  Swift

      public func select<R>(
          _ resultType: R.Type,
          _ selectTerms: [SelectTerm<O>]
      ) -> QueryChainBuilder<O, R>

  #### Parameters

  `resultType` | the generic `SelectResultType` for the `Select` clause
  `selectTerms` | a series of `SelectTerm`s

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified `SelectTerm`s

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` that starts with the `SectionBy` to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy(_ clause: SectionBy<O>) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `clause` | the `SectionBy` to be used by the `ListMonitor`

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy(_ sectionKeyPath: KeyPathString) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the key path to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy(
          _ sectionKeyPath: KeyPathString,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the key path to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

### Available where `O`: `NSManagedObject`

- `select(_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

  #### Declaration

  Swift

      public func select<R>(_ keyPath: KeyPath<O, R>) -> QueryChainBuilder<O, R> where R : SelectResultType

  #### Parameters

  `keyPath` | the keyPath to query the value for

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, T>) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, T>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

### Available where `O`: `CoreStoreObject`

- `where(_:)`

  Creates a `FetchChainBuilder` that starts with the specified `Where` clause

  #### Declaration

  Swift

      public func `where`<T>(_ clause: (O) -> T) -> FetchChainBuilder<O> where T : AnyWhereClause

  #### Parameters

  `clause` | a closure that returns a `Where` clause

  #### Return Value

  a `FetchChainBuilder` that starts with the specified `Where` clause

- `select(_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

  #### Declaration

  Swift

      public func select<R>(_ keyPath: KeyPath<O, ValueContainer<O>.Required<R>>) -> QueryChainBuilder<O, R> where R : ImportableAttributeType

  #### Parameters

  `keyPath` | the keyPath to query the value for

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

- `select(_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

  #### Declaration

  Swift

      public func select<R>(_ keyPath: KeyPath<O, ValueContainer<O>.Optional<R>>) -> QueryChainBuilder<O, R> where R : ImportableAttributeType

  #### Parameters

  `keyPath` | the keyPath to query the value for

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

- `select(_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

  #### Declaration

  Swift

      public func select<R>(_ keyPath: KeyPath<O, TransformableContainer<O>.Required<R>>) -> QueryChainBuilder<O, R> where R : SelectResultType, R : NSCoding, R : NSCopying

  #### Parameters

  `keyPath` | the keyPath to query the value for

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

- `select(_:)`

  Creates a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

  #### Declaration

  Swift

      public func select<R>(_ keyPath: KeyPath<O, TransformableContainer<O>.Optional<R>>) -> QueryChainBuilder<O, R> where R : SelectResultType, R : NSCoding, R : NSCopying

  #### Parameters

  `keyPath` | the keyPath to query the value for

  #### Return Value

  a `QueryChainBuilder` that starts with a `Select` clause created from the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, FieldContainer<O>.Stored<T>>) -> SectionMonitorChainBuilder<O> where T : FieldStorableType

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, FieldContainer<O>.Virtual<T>>) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, FieldContainer<O>.Coded<T>>) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, ValueContainer<O>.Required<T>>) -> SectionMonitorChainBuilder<O> where T : ImportableAttributeType

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, ValueContainer<O>.Optional<T>>) -> SectionMonitorChainBuilder<O> where T : ImportableAttributeType

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, TransformableContainer<O>.Required<T>>) -> SectionMonitorChainBuilder<O> where T : NSCoding, T : NSCopying

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections

  #### Declaration

  Swift

      public func sectionBy<T>(_ sectionKeyPath: KeyPath<O, TransformableContainer<O>.Optional<T>>) -> SectionMonitorChainBuilder<O> where T : NSCoding, T : NSCopying

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, FieldContainer<O>.Stored<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, FieldContainer<O>.Virtual<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, FieldContainer<O>.Coded<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, ValueContainer<O>.Required<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, ValueContainer<O>.Optional<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, TransformableContainer<O>.Required<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path

- `sectionBy(_:sectionIndexTransformer:)`

  Creates a `SectionMonitorChainBuilder` with the key path to use to group `ListMonitor` objects into sections, and a closure to transform the value for the key path to an appropriate section index title

  Important

  Some utilities (such as `ListMonitor`s) may keep `SectionBy`s in memory and may thus introduce retain cycles if reference captures are not handled properly.

  #### Declaration

  Swift

      public func sectionBy<T>(
          _ sectionKeyPath: KeyPath<O, TransformableContainer<O>.Optional<T>>,
          sectionIndexTransformer: @escaping (_ sectionName: String?) -> String?
      ) -> SectionMonitorChainBuilder<O>

  #### Parameters

  `sectionKeyPath` | the `KeyPath` to use to group the objects into sections
  `sectionIndexTransformer` | a closure to transform the value for the key path to an appropriate section index title

  #### Return Value

  a `SectionMonitorChainBuilder` that is sectioned by the specified key path