diff --git a/Sources/Vexil/Pole.swift b/Sources/Vexil/Pole.swift index 13b50988..e6bc779d 100644 --- a/Sources/Vexil/Pole.swift +++ b/Sources/Vexil/Pole.swift @@ -87,9 +87,11 @@ public final class FlagPole: Sendable where RootGroup: FlagContainer /// public static var defaultSources: [any FlagValueSource] { #if !os(Linux) - [ - FlagValueSourceCoordinator(source: UserDefaults.standard), - ] +#if swift(>=6) + [ FlagValueSourceCoordinator(source: UserDefaults.standard) ] +#else + [ FlagValueSourceCoordinator(uncheckedSource: UserDefaults.standard) ] +#endif #else [] #endif diff --git a/Sources/Vexil/Sources/FlagValueSourceCoordinator.swift b/Sources/Vexil/Sources/FlagValueSourceCoordinator.swift index 62a0584f..61e2c19e 100644 --- a/Sources/Vexil/Sources/FlagValueSourceCoordinator.swift +++ b/Sources/Vexil/Sources/FlagValueSourceCoordinator.swift @@ -27,10 +27,20 @@ public final class FlagValueSourceCoordinator: Sendable where Source: No // MARK: - Initialisation - public init(source: Source) { + /// Create a FlagValueSource from a NonSendableFlagValueSource. If `Source` is a reference type, + /// you must not continue to access it (except via this coordinator) after passing it to this + /// initializer. + public init(uncheckedSource source: Source) { self.source = .init(uncheckedState: source) } +#if swift(>=6) + /// Create a FlagValueSource from a NonSendableFlagValueSource. + public init(source: sending Source) { + self.source = .init(uncheckedState: source) + } +#endif + }