From e41a59e45d8333a7be516b83514d1823461b0e7e Mon Sep 17 00:00:00 2001 From: Farshad Sheykhi Date: Thu, 11 Jul 2019 13:30:55 -0700 Subject: [PATCH] Update RxSwift to 5.0 --- .travis.yml | 2 +- Cartfile | 2 +- Cartfile.resolved | 2 +- RxSwiftUtilities.podspec | 4 +- RxSwiftUtilities.xcodeproj/project.pbxproj | 50 +++++++++++++++---- .../xcshareddata/WorkspaceSettings.xcsettings | 5 ++ .../xcschemes/RxSwiftUtilities iOS.xcscheme | 2 +- .../xcschemes/RxSwiftUtilities macOS.xcscheme | 2 +- .../xcschemes/RxSwiftUtilities tvOS.xcscheme | 2 +- .../RxSwiftUtilities watchOS.xcscheme | 2 +- Source/Common/ActivityIndicator.swift | 10 ++-- Source/iOS/TwoWayBinding.swift | 30 +++++------ Tests/TwoWayBindingTests.swift | 34 ++++++------- 13 files changed, 92 insertions(+), 55 deletions(-) create mode 100644 RxSwiftUtilities.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/.travis.yml b/.travis.yml index a9855d0..10675ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode9.2 +osx_image: xcode10.2 before_install: - carthage bootstrap --no-use-binaries --platform ios script: xcodebuild clean build test -scheme 'RxSwiftUtilities iOS' -destination "platform=iOS Simulator,name=iPhone 6S" -enableCodeCoverage YES diff --git a/Cartfile b/Cartfile index 4cb3fb3..6a8bfd6 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1 @@ -github "ReactiveX/RxSwift" ~> 4.0 +github "ReactiveX/RxSwift" ~> 5.0 diff --git a/Cartfile.resolved b/Cartfile.resolved index ce434dc..b751e3d 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1 +1 @@ -github "ReactiveX/RxSwift" "4.4.0" +github "ReactiveX/RxSwift" "5.0.1" diff --git a/RxSwiftUtilities.podspec b/RxSwiftUtilities.podspec index 1559352..ea6660d 100644 --- a/RxSwiftUtilities.podspec +++ b/RxSwiftUtilities.podspec @@ -16,6 +16,6 @@ Helpful classes and extensions for RxSwift which don't belong in RxSwift core. s.source = { :git => "https://github.com/RxSwiftCommunity/RxSwiftUtilities.git", :tag => "#{s.version}" } s.source_files = 'Source/Common/*.swift' s.ios.source_files = 'Source/iOS/*.swift' - s.dependency "RxSwift", "~> 4.4" - s.dependency "RxCocoa", "~> 4.4" + s.dependency "RxSwift", "~> 5.0" + s.dependency "RxCocoa", "~> 5.0" end diff --git a/RxSwiftUtilities.xcodeproj/project.pbxproj b/RxSwiftUtilities.xcodeproj/project.pbxproj index b98ecc9..5d0fbb1 100644 --- a/RxSwiftUtilities.xcodeproj/project.pbxproj +++ b/RxSwiftUtilities.xcodeproj/project.pbxproj @@ -7,6 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 42A23D1822C680A2009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D1722C680A2009E255F /* RxRelay.framework */; }; + 42A23D1D22C681A5009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D1C22C681A5009E255F /* RxRelay.framework */; }; + 42A23D1F22C681B8009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D1E22C681B8009E255F /* RxRelay.framework */; }; + 42A23D2122C681C3009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D2022C681C3009E255F /* RxRelay.framework */; }; + 42A23D2222C6825F009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D1722C680A2009E255F /* RxRelay.framework */; }; + 42A23D2322C68265009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D1C22C681A5009E255F /* RxRelay.framework */; }; + 42A23D2422C6826C009E255F /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A23D1E22C681B8009E255F /* RxRelay.framework */; }; 880343121DE303160055DA33 /* RxSwiftUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 880343081DE303160055DA33 /* RxSwiftUtilities.framework */; }; 880343191DE303160055DA33 /* RxSwiftUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 8803430B1DE303160055DA33 /* RxSwiftUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; 880343681DE395A20055DA33 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 880343671DE395A20055DA33 /* RxCocoa.framework */; }; @@ -65,6 +72,10 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 42A23D1722C680A2009E255F /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/iOS/RxRelay.framework; sourceTree = ""; }; + 42A23D1C22C681A5009E255F /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/Mac/RxRelay.framework; sourceTree = ""; }; + 42A23D1E22C681B8009E255F /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/tvOS/RxRelay.framework; sourceTree = ""; }; + 42A23D2022C681C3009E255F /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/watchOS/RxRelay.framework; sourceTree = ""; }; 880343081DE303160055DA33 /* RxSwiftUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwiftUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8803430B1DE303160055DA33 /* RxSwiftUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RxSwiftUtilities.h; sourceTree = ""; }; 8803430C1DE303160055DA33 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -97,6 +108,7 @@ files = ( 888CC1911DE4839900DAE48A /* RxSwift.framework in Frameworks */, 880343681DE395A20055DA33 /* RxCocoa.framework in Frameworks */, + 42A23D1822C680A2009E255F /* RxRelay.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -108,6 +120,7 @@ 88EB6322216B43F400130C74 /* RxSwift.framework in Frameworks */, 88798719216B540500ED83F6 /* RxCocoa.framework in Frameworks */, 8879871B216B71F400ED83F6 /* RxTest.framework in Frameworks */, + 42A23D2222C6825F009E255F /* RxRelay.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -117,6 +130,7 @@ files = ( 888CC1C11DE48C6D00DAE48A /* RxSwift.framework in Frameworks */, 888CC1C01DE48C6B00DAE48A /* RxCocoa.framework in Frameworks */, + 42A23D1F22C681B8009E255F /* RxRelay.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -124,6 +138,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 42A23D2422C6826C009E255F /* RxRelay.framework in Frameworks */, 888CC1A91DE48A1000DAE48A /* RxSwiftUtilities.framework in Frameworks */, 888CC1C31DE48DE400DAE48A /* RxSwift.framework in Frameworks */, 888CC1C41DE48DE700DAE48A /* RxCocoa.framework in Frameworks */, @@ -136,6 +151,7 @@ files = ( 888CC1EB1DE4900400DAE48A /* RxSwift.framework in Frameworks */, 888CC1E91DE48FFA00DAE48A /* RxCocoa.framework in Frameworks */, + 42A23D1D22C681A5009E255F /* RxRelay.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -143,6 +159,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 42A23D2322C68265009E255F /* RxRelay.framework in Frameworks */, 888CC1D51DE48E9100DAE48A /* RxSwiftUtilities.framework in Frameworks */, 888CC1EC1DE4903900DAE48A /* RxSwift.framework in Frameworks */, 888CC1ED1DE4903B00DAE48A /* RxCocoa.framework in Frameworks */, @@ -155,6 +172,7 @@ files = ( 888CC1981DE4848300DAE48A /* RxSwift.framework in Frameworks */, 888CC1991DE4848500DAE48A /* RxCocoa.framework in Frameworks */, + 42A23D2122C681C3009E255F /* RxRelay.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -237,6 +255,7 @@ 888CC1921DE483AC00DAE48A /* iOS */ = { isa = PBXGroup; children = ( + 42A23D1722C680A2009E255F /* RxRelay.framework */, 888CC1901DE4839900DAE48A /* RxSwift.framework */, 880343671DE395A20055DA33 /* RxCocoa.framework */, ); @@ -246,6 +265,7 @@ 888CC1931DE4841400DAE48A /* watchOS */ = { isa = PBXGroup; children = ( + 42A23D2022C681C3009E255F /* RxRelay.framework */, 888CC1961DE4843000DAE48A /* RxSwift.framework */, 888CC1941DE4842B00DAE48A /* RxCocoa.framework */, ); @@ -255,6 +275,7 @@ 888CC1BB1DE48AF800DAE48A /* tvOS */ = { isa = PBXGroup; children = ( + 42A23D1E22C681B8009E255F /* RxRelay.framework */, 888CC1BC1DE48B1300DAE48A /* RxSwift.framework */, 888CC1BE1DE48B1A00DAE48A /* RxCocoa.framework */, ); @@ -264,6 +285,7 @@ 888CC1E61DE48FE600DAE48A /* macOS */ = { isa = PBXGroup; children = ( + 42A23D1C22C681A5009E255F /* RxRelay.framework */, 888CC1EA1DE4900400DAE48A /* RxSwift.framework */, 888CC1E71DE48FF600DAE48A /* RxCocoa.framework */, ); @@ -460,52 +482,53 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 1000; + LastUpgradeCheck = 1020; ORGANIZATIONNAME = RxSwiftCommunity; TargetAttributes = { 880343071DE303160055DA33 = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = ""; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; 880343101DE303160055DA33 = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = ""; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; 888CC19F1DE48A1000DAE48A = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 0920; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; 888CC1A71DE48A1000DAE48A = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 0920; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; 888CC1CB1DE48E9000DAE48A = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 0920; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; 888CC1D31DE48E9100DAE48A = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 0920; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; 88E73C601DE481A100C0D2F6 = { CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 0920; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = 880343021DE303160055DA33 /* Build configuration list for PBXProject "RxSwiftUtilities" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 880342FE1DE303160055DA33; productRefGroup = 880343091DE303160055DA33 /* Products */; @@ -585,6 +608,7 @@ "$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework", "$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework", "$(SRCROOT)/Carthage/Build/iOS/RxTest.framework", + "$(SRCROOT)/Carthage/Build/iOS/RxRelay.framework", ); name = Carthage; outputPaths = ( @@ -601,6 +625,7 @@ inputPaths = ( "$(SRCROOT)/Carthage/Build/tvOS/RxSwift.framework", "$(SRCROOT)/Carthage/Build/tvOS/RxCocoa.framework", + "$(SRCROOT)/Carthage/Build/tvOS/RxRelay.framework", ); name = Carthage; outputPaths = ( @@ -617,6 +642,7 @@ inputPaths = ( "$(SRCROOT)/Carthage/Build/Mac/RxSwift.framework", "$(SRCROOT)/Carthage/Build/Mac/RxCocoa.framework", + "$(SRCROOT)/Carthage/Build/Mac/RxRelay.framework", ); name = Carthage; outputPaths = ( @@ -918,6 +944,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/tvOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -943,6 +970,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/tvOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -1005,6 +1033,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; @@ -1030,6 +1059,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; @@ -1095,6 +1125,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/watchOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -1121,6 +1152,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/watchOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; diff --git a/RxSwiftUtilities.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/RxSwiftUtilities.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/RxSwiftUtilities.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + diff --git a/RxSwiftUtilities.xcodeproj/xcshareddata/xcschemes/RxSwiftUtilities iOS.xcscheme b/RxSwiftUtilities.xcodeproj/xcshareddata/xcschemes/RxSwiftUtilities iOS.xcscheme index 912be5a..bbceb7e 100644 --- a/RxSwiftUtilities.xcodeproj/xcshareddata/xcschemes/RxSwiftUtilities iOS.xcscheme +++ b/RxSwiftUtilities.xcodeproj/xcshareddata/xcschemes/RxSwiftUtilities iOS.xcscheme @@ -1,6 +1,6 @@ : ObservableConvertibleType, Disposable { When all activities complete `false` will be sent. */ public class ActivityIndicator : SharedSequenceConvertibleType { - public typealias E = Bool + public typealias Element = Bool public typealias SharingStrategy = DriverSharingStrategy private let _lock = NSRecursiveLock() @@ -51,8 +51,8 @@ public class ActivityIndicator : SharedSequenceConvertibleType { .distinctUntilChanged() } - fileprivate func trackActivityOfObservable(_ source: O) -> Observable { - return Observable.using({ () -> ActivityToken in + fileprivate func trackActivityOfObservable(_ source: O) -> Observable { + return Observable.using({ () -> ActivityToken in self.increment() return ActivityToken(source: source.asObservable(), disposeAction: self.decrement) }) { t in @@ -72,13 +72,13 @@ public class ActivityIndicator : SharedSequenceConvertibleType { _lock.unlock() } - public func asSharedSequence() -> SharedSequence { + public func asSharedSequence() -> SharedSequence { return _loading } } extension ObservableConvertibleType { - public func trackActivity(_ activityIndicator: ActivityIndicator) -> Observable { + public func trackActivity(_ activityIndicator: ActivityIndicator) -> Observable { return activityIndicator.trackActivityOfObservable(self) } } diff --git a/Source/iOS/TwoWayBinding.swift b/Source/iOS/TwoWayBinding.swift index d5a9738..70b7fb7 100644 --- a/Source/iOS/TwoWayBinding.swift +++ b/Source/iOS/TwoWayBinding.swift @@ -13,7 +13,7 @@ import RxSwift import RxCocoa import UIKit -// Two way binding operator between control property and variable, that's all it takes +// Two way binding operator between control property and behaviorRelay, that's all it takes infix operator <-> : DefaultPrecedence @@ -38,10 +38,10 @@ private func nonMarkedText(_ textInput: UITextInput) -> String? { return (textInput.text(in: startRange) ?? "") + (textInput.text(in: endRange) ?? "") } -public func <-> (textInput: TextInput, variable: Variable) -> Disposable { - let bindToUIDisposable = variable.asObservable() +public func <-> (textInput: TextInput, behaviorRelay: BehaviorRelay) -> Disposable { + let bindToUIDisposable = behaviorRelay.asObservable() .bind(to: textInput.text) - let bindToVariable = textInput.text + let bindToBehaviorRelay = textInput.text .subscribe(onNext: { [weak base = textInput.base] n in guard let base = base else { return @@ -54,35 +54,35 @@ public func <-> (textInput: TextInput, variable: Variable) - value is not nil. This appears to be an Apple bug. If it's not, and we are doing something wrong, please let us know. The can be reproed easily if replace bottom code with - if nonMarkedTextValue != variable.value { - variable.value = nonMarkedTextValue ?? "" + if nonMarkedTextValue != behaviorRelay.value { + behaviorRelay.accept(nonMarkedTextValue ?? "") } and you hit "Done" button on keyboard. */ - if let nonMarkedTextValue = nonMarkedTextValue, nonMarkedTextValue != variable.value { - variable.value = nonMarkedTextValue + if let nonMarkedTextValue = nonMarkedTextValue, nonMarkedTextValue != behaviorRelay.value { + behaviorRelay.accept(nonMarkedTextValue) } }, onCompleted: { bindToUIDisposable.dispose() }) - return Disposables.create(bindToUIDisposable, bindToVariable) + return Disposables.create(bindToUIDisposable, bindToBehaviorRelay) } /// When binding `rx.text`, be warned that for languages that use IME, intermediate results might be returned while text is being inputed. -/// REMEDY: Just use `textField <-> variable` instead of `textField.rx.text <-> variable`. +/// REMEDY: Just use `textField <-> behaviorRelay` instead of `textField.rx.text <-> behaviorRelay`. /// Find out more here: https://github.com/ReactiveX/RxSwift/issues/649 -public func <-> (property: ControlProperty, variable: Variable) -> Disposable { +public func <-> (property: ControlProperty, behaviorRelay: BehaviorRelay) -> Disposable { - let bindToUIDisposable = variable.asObservable() + let bindToUIDisposable = behaviorRelay.asObservable() .bind(to: property) - let bindToVariable = property + let bindToBehaviorRelay = property .subscribe(onNext: { n in - variable.value = n + behaviorRelay.accept(n) }, onCompleted: { bindToUIDisposable.dispose() }) - return Disposables.create(bindToUIDisposable, bindToVariable) + return Disposables.create(bindToUIDisposable, bindToBehaviorRelay) } diff --git a/Tests/TwoWayBindingTests.swift b/Tests/TwoWayBindingTests.swift index bde9f21..6c2f2a8 100644 --- a/Tests/TwoWayBindingTests.swift +++ b/Tests/TwoWayBindingTests.swift @@ -16,7 +16,7 @@ private class TwoWayBindingTests: XCTestCase { func testNoInitialControlPropertyValue() { let bag = DisposeBag() - let variable = Variable("start") + let behaviorRelay = BehaviorRelay(value: "start") let controlValues = PublishSubject() let controlSink = MockObserver() let controlProperty = ControlProperty( @@ -24,19 +24,19 @@ private class TwoWayBindingTests: XCTestCase { valueSink: controlSink ) - XCTAssertEqual(variable.value, "start") + XCTAssertEqual(behaviorRelay.value, "start") XCTAssertEqual(controlSink.events, []) - (controlProperty <-> variable) + (controlProperty <-> behaviorRelay) .disposed(by: bag) - XCTAssertEqual(variable.value, "start") + XCTAssertEqual(behaviorRelay.value, "start") XCTAssertEqual(controlSink.events, [Event.next("start")]) } func testWithInitialControlPropertyValue() { let bag = DisposeBag() - let variable = Variable("start variable") + let behaviorRelay = BehaviorRelay(value: "start behaviorRelay") let controlValues = BehaviorSubject(value: "start control") let controlSink = MockObserver() let controlProperty = ControlProperty( @@ -44,20 +44,20 @@ private class TwoWayBindingTests: XCTestCase { valueSink: controlSink ) - XCTAssertEqual(variable.value, "start variable") + XCTAssertEqual(behaviorRelay.value, "start behaviorRelay") XCTAssertEqual(controlSink.events, []) - (controlProperty <-> variable) + (controlProperty <-> behaviorRelay) .disposed(by: bag) - XCTAssertEqual(variable.value, "start control") - XCTAssertEqual(controlSink.events, [Event.next("start variable"), + XCTAssertEqual(behaviorRelay.value, "start control") + XCTAssertEqual(controlSink.events, [Event.next("start behaviorRelay"), Event.next("start control")]) } func testChanged() { let bag = DisposeBag() - let variable = Variable("start") + let behaviorRelay = BehaviorRelay(value: "start") let controlValues = PublishSubject() let controlSink = MockObserver() let controlProperty = ControlProperty( @@ -65,12 +65,12 @@ private class TwoWayBindingTests: XCTestCase { valueSink: controlSink ) - (controlProperty <-> variable) + (controlProperty <-> behaviorRelay) .disposed(by: bag) - variable.value = "changed" + behaviorRelay.accept("changed") - XCTAssertEqual(variable.value, "changed") + XCTAssertEqual(behaviorRelay.value, "changed") XCTAssertEqual(controlSink.events, [Event.next("start"), .next("changed")]) @@ -79,9 +79,9 @@ private class TwoWayBindingTests: XCTestCase { XCTAssertEqual(controlSink.events, [Event.next("start"), .next("changed"), .next("changed 2")]) - XCTAssertEqual(variable.value, "changed 2") + XCTAssertEqual(behaviorRelay.value, "changed 2") - variable.value = "changed 3" + behaviorRelay.accept("changed 3") XCTAssertEqual(controlSink.events, [Event.next("start"), .next("changed"), @@ -92,9 +92,9 @@ private class TwoWayBindingTests: XCTestCase { func testTextInput() { let bag = DisposeBag() let textField = UITextField() - let variable = Variable("start") + let behaviorRelay = BehaviorRelay(value: "start") - (textField.rx.textInput <-> variable) + (textField.rx.textInput <-> behaviorRelay) .disposed(by: bag) XCTAssertEqual(textField.text, "start")