extension Reactive { /// A proxy which holds reactive binding target extensions of `Base`. struct Binds { fileprivate init(_ base: Base) { self.base = base } let base: Base } var bind: Binds { return Binds(self.base) } /// A proxy which holds reactive signal extensions of `Base`. struct Signals { fileprivate init(_ base: Base) { self.base = base } let base: Base } var signal: Signals { return Signals(self.base) } /// A proxy which holds reactive signal producer extensions of `Base`. struct Producers { fileprivate init(_ base: Base) { self.base = base } let base: Base } var producer: Producers { return Producers(self.base) } } extension Reactive.Binds where Base: ReactiveExtensionsProvider { /// Convenience `self.base.reactive` accessor. var reactive: Reactive { return self.base.reactive } } extension Reactive.Signals where Base: ReactiveExtensionsProvider { /// Convenience `self.base.reactive` accessor. var reactive: Reactive { return self.base.reactive } } extension Reactive.Producers where Base: ReactiveExtensionsProvider { /// Convenience `self.base.reactive` accessor. var reactive: Reactive { return self.base.reactive } }