diff --git a/Rx.xcodeproj/project.pbxproj b/Rx.xcodeproj/project.pbxproj index 48c33af71..961864538 100644 --- a/Rx.xcodeproj/project.pbxproj +++ b/Rx.xcodeproj/project.pbxproj @@ -2995,7 +2995,6 @@ C8C217D71CB710200038A2E6 /* UICollectionView+RxTests.swift in Sources */, C83509451C38706E0027C24C /* Observable.Extensions.swift in Sources */, C835093B1C38706E0027C24C /* RXObjCRuntime+Testing.m in Sources */, - C83509641C38706E0027C24C /* VariableTest.swift in Sources */, C83509461C38706E0027C24C /* PrimitiveHotObservable.swift in Sources */, C820A9861EB4FB5B00D431BC /* Observable+DebugTests.swift in Sources */, C820AA021EB5134000D431BC /* Observable+DelaySubscriptionTests.swift in Sources */, @@ -3132,7 +3131,6 @@ C8B2908A1C94D64700E923D0 /* RxTest+Controls.swift in Sources */, B44D73EC1EE6D4A300EBFBE8 /* UIViewController+RxTests.swift in Sources */, C820A9671EB4F39500D431BC /* Observable+SubscribeOnTests.swift in Sources */, - C8350A181C38756A0027C24C /* VariableTest.swift in Sources */, C820A9C71EB50A4200D431BC /* Observable+SkipWhileTests.swift in Sources */, C8BAA78E1E34F8D400EEC727 /* RecursiveLockTest.swift in Sources */, C83509EF1C3875580027C24C /* PrimitiveHotObservable.swift in Sources */, @@ -3368,7 +3366,6 @@ 927A78C92117BCB400A45638 /* NSTextView+RxTests.swift in Sources */, C820A9CC1EB50A7100D431BC /* Observable+ElementAtTests.swift in Sources */, C83509D11C38752E0027C24C /* RuntimeStateSnapshot.swift in Sources */, - C8350A221C38756B0027C24C /* VariableTest.swift in Sources */, C8A53AE71F09292A00490535 /* Completable+AndThen.swift in Sources */, 1E9DA0C722006858000EB80A /* Synchronized.swift in Sources */, C83509D21C3875380027C24C /* RXObjCRuntime+Testing.m in Sources */, diff --git a/RxCocoa/Deprecated.swift b/RxCocoa/Deprecated.swift index 2c9a4aed6..560319255 100644 --- a/RxCocoa/Deprecated.swift +++ b/RxCocoa/Deprecated.swift @@ -249,6 +249,7 @@ public func driveOnScheduler(_ scheduler: SchedulerType, action: () -> Void) { SharingScheduler.mock(scheduler: scheduler, action: action) } +@available(*, deprecated, message: "Variable is deprecated. Please use `BehaviorRelay` as a replacement.") extension Variable { /// Converts `Variable` to `SharedSequence` unit. /// @@ -407,6 +408,7 @@ extension Reactive where Base: UISegmentedControl { import RxSwift +@available(*, deprecated, message: "Variable is deprecated. Please use `BehaviorRelay` as a replacement.") extension Variable { /// Converts `Variable` to `Driver` trait. /// @@ -430,6 +432,7 @@ extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingSt - parameter variable: Target variable for sequence elements. - returns: Disposable object that can be used to unsubscribe the observer from the variable. */ + @available(*, deprecated, message: "Variable is deprecated. Please use `BehaviorRelay` as a replacement.") public func drive(_ variable: Variable) -> Disposable { MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) return self.drive(onNext: { e in @@ -444,6 +447,7 @@ extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingSt - parameter variable: Target variable for sequence elements. - returns: Disposable object that can be used to unsubscribe the observer from the variable. */ + @available(*, deprecated, message: "Variable is deprecated. Please use `BehaviorRelay` as a replacement.") public func drive(_ variable: Variable) -> Disposable { MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) return self.drive(onNext: { e in @@ -452,6 +456,7 @@ extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingSt } } +@available(*, deprecated, message: "Variable is deprecated. Please use `BehaviorRelay` as a replacement.") extension ObservableType { /** Creates new subscription and sends elements to variable. diff --git a/RxSwift/Deprecated.swift b/RxSwift/Deprecated.swift index cb410906e..57ac62f36 100644 --- a/RxSwift/Deprecated.swift +++ b/RxSwift/Deprecated.swift @@ -167,6 +167,7 @@ extension ObservableType { /// * It has an inconsistent memory management model compared to other parts of RxSwift (completes on `deinit`). /// /// Once plans are finalized, official availability attribute will be added in one of upcoming versions. +@available(*, deprecated, message: "Variable is deprecated. Please use `BehaviorRelay` as a replacement.") public final class Variable { public typealias E = Element @@ -209,10 +210,6 @@ public final class Variable { /// /// - parameter value: Initial variable value. public init(_ value: Element) { - #if DEBUG - DeprecationWarner.warnIfNeeded(.variable) - #endif - self._value = value self._subject = BehaviorSubject(value: value) } diff --git a/Tests/RxCocoaTests/Driver+Test.swift b/Tests/RxCocoaTests/Driver+Test.swift index 0b0754e17..b1d081ef2 100644 --- a/Tests/RxCocoaTests/Driver+Test.swift +++ b/Tests/RxCocoaTests/Driver+Test.swift @@ -178,14 +178,14 @@ extension DriverTest { } func testVariableAsDriver() { - var hotObservable: Variable? = Variable(1) + var hotObservable: BehaviorRelay? = BehaviorRelay(value: 1) let xs = Driver.zip(hotObservable!.asDriver(), Driver.of(0, 0)) { optInt, _ in return optInt } let results = subscribeTwiceOnBackgroundSchedulerAndOnlyOneSubscription(xs) { - hotObservable?.value = 1 - hotObservable?.value = 2 + hotObservable?.accept(1) + hotObservable?.accept(2) hotObservable = nil } diff --git a/Tests/RxCocoaTests/Observable+BindTests.swift b/Tests/RxCocoaTests/Observable+BindTests.swift index 1439d9a59..66e04a485 100644 --- a/Tests/RxCocoaTests/Observable+BindTests.swift +++ b/Tests/RxCocoaTests/Observable+BindTests.swift @@ -66,34 +66,6 @@ extension ObservableBindTest { } } -// MARK: bind(to:) variable - -extension ObservableBindTest { - func testBindToVariable() { - let variable = Variable(0) - - _ = Observable.just(1).bind(to: variable) - - XCTAssertEqual(variable.value, 1) - } - - func testBindToOptionalVariable() { - let variable = Variable(0) - - _ = (Observable.just(1) as Observable).bind(to: variable) - - XCTAssertEqual(variable.value, 1) - } - - func testBindToVariableNoAmbiguity() { - let variable = Variable(0) - - _ = Observable.just(1).bind(to: variable) - - XCTAssertEqual(variable.value, 1) - } -} - // MARK: bind(to:) publish relay extension ObservableBindTest { diff --git a/Tests/RxSwiftTests/VariableTest.swift b/Tests/RxSwiftTests/VariableTest.swift deleted file mode 100644 index 295f81c75..000000000 --- a/Tests/RxSwiftTests/VariableTest.swift +++ /dev/null @@ -1,109 +0,0 @@ -// -// VariableTest.swift -// Tests -// -// Created by Krunoslav Zaher on 5/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import XCTest -import RxSwift - -class VariableTest : RxTest { - func testVariable_initialValues() { - let a = Variable(1) - let b = Variable(2) - - let c = Observable.combineLatest(a.asObservable(), b.asObservable(), resultSelector: +) - - var latestValue: Int? - - let subscription = c - .subscribe(onNext: { next in - latestValue = next - }) - - XCTAssertEqual(latestValue!, 3) - - a.value = 5 - - XCTAssertEqual(latestValue!, 7) - - b.value = 9 - - XCTAssertEqual(latestValue!, 14) - - subscription.dispose() - - a.value = 10 - - XCTAssertEqual(latestValue!, 14) - } - - func testVariable_sendsCompletedOnDealloc() { - var a = Variable(1) - - var latest = 0 - var completed = false - _ = a.asObservable().subscribe(onNext: { n in - latest = n - }, onCompleted: { - completed = true - }) - - XCTAssertEqual(latest, 1) - XCTAssertFalse(completed) - - a = Variable(2) - - XCTAssertEqual(latest, 1) - XCTAssertTrue(completed) - } - - func testVariable_READMEExample() { - - // Two simple Rx variables - // Every variable is actually a sequence future values in disguise. - let a /*: Observable*/ = Variable(1) - let b /*: Observable*/ = Variable(2) - - // Computed third variable (or sequence) - let c /*: Observable*/ = Observable.combineLatest(a.asObservable(), b.asObservable()) { $0 + $1 } - - // Reading elements from c. - // This is just a demo example. - // Sequence elements are usually never enumerated like this. - // Sequences are usually combined using map/filter/combineLatest ... - // - // This will immediately print: - // Next value of c = 3 - // because variables have initial values (starting element) - var latestValueOfC: Int? - // let _ = doesn't retain. - let d/*: Disposable*/ = c - .subscribe(onNext: { c in - //print("Next value of c = \(c)") - latestValueOfC = c - }) - - defer { - d.dispose() - } - - XCTAssertEqual(latestValueOfC!, 3) - - // This will print: - // Next value of c = 5 - a.value = 3 - - XCTAssertEqual(latestValueOfC!, 5) - - // This will print: - // Next value of c = 8 - b.value = 5 - - XCTAssertEqual(latestValueOfC!, 8) - } - -} -