Skip to content

DerivedEnvironment

maximkrouk edited this page May 5, 2022 · 1 revision

DerivedEnvironment

Use this property wrapper to declare some child GlobalEnvironment in a GlobalEnvironment parent.

@propertyWrapper
public final class DerivedEnvironment<Environment> where Environment: GlobalEnvironment 

You only need to specify the type used and its name. You don't need to instantiate the type. For example, if ChildEnvironment is some GlobalEnvironment, you can install a representant in ParentEnvironment as:

struct ParentEnvironment: GlobalEnvironment {
  @DerivedEnvironment<ChildEnvironment> var child
}.

This exposes a var child: ChildEnvironment read-only property in the ParentEnvironment.

When using GlobalEnvironment, the principal use of this property wrapper is to define DependencyAlias's using the AliasBuilder closure from the intializers:

struct ParentEnvironment: GlobalEnvironment {
  @DerivedEnvironment<ChildEnvironment>(aliases: {
    $0.alias(\.main, to: \.mainQueue)
  }) var child
}

Initializers

init(wrappedValue:aliases:)

See DerivedEnvironment discussion

public init(
    wrappedValue: Environment,
    aliases: (
      (AliasBuilder<Environment>)
        -> AliasBuilder<Environment>
    )? = nil
  ) 

init(aliases:)

See DerivedEnvironment discussion

public init(aliases: ((AliasBuilder<Environment>) -> AliasBuilder<Environment>)? = nil) 

init(wrappedValue:aliases:)

See DerivedEnvironment discussion

public init(
    wrappedValue: Environment,
    aliases: ((AliasBuilder<Environment>) -> AliasBuilder<Environment>)? = nil
  ) 

init(aliases:)

See DerivedEnvironment discussion

public init(aliases: ((AliasBuilder<Environment>) -> AliasBuilder<Environment>)? = nil) 

Properties

wrappedValue

@available(
    *, unavailable,
    message: "@DerivedEnvironment should be used in a ComposableEnvironment class."
  )
  public var wrappedValue: Environment 

wrappedValue

public var wrappedValue: Environment