src/main/java/io/reactivex/Completable.java
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <E extends CompletableObserver> E subscribeWith(E observer) {
        subscribe(observer);
        return observer;
    }
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <E extends CompletableObserver> E subscribeWith(E observer) {
        subscribe(observer);
        return observer;
    }
Subscribes a given CompletableObserver (subclass) to this Completable and returns the given
CompletableObserver as is.
<p>
<img width="640" height="349" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Completable.subscribeWith.png" alt="">
<p>Usage example:
<pre><code>
Completable source = Completable.complete().delay(1, TimeUnit.SECONDS);
CompositeDisposable composite = new CompositeDisposable();

DisposableCompletableObserver ds = new DisposableCompletableObserver() {
// ...
};

composite.add(source.subscribeWith(ds));
</code></pre>
<dl>
<dt><b>Scheduler:</b></dt>
<dd>{@code subscribeWith} does not operate by default on a particular {@link Scheduler}.</dd>
</dl>
@param <E> the type of the CompletableObserver to use and return
@param observer the CompletableObserver (subclass) to use and return, not null
@return the input {@code observer}
@throws NullPointerException if {@code observer} is null
@since 2.0