diff --git a/Rx.xcodeproj/project.pbxproj b/Rx.xcodeproj/project.pbxproj index 97f9e98b..3ed1c97e 100644 --- a/Rx.xcodeproj/project.pbxproj +++ b/Rx.xcodeproj/project.pbxproj @@ -398,6 +398,14 @@ C8BCD3C81C1468D4005F1280 /* ShareReplay1WhileConnected.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3C61C1468D4005F1280 /* ShareReplay1WhileConnected.swift */; }; C8BCD3C91C1468D4005F1280 /* ShareReplay1WhileConnected.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3C61C1468D4005F1280 /* ShareReplay1WhileConnected.swift */; }; C8BCD3CA1C1468D4005F1280 /* ShareReplay1WhileConnected.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3C61C1468D4005F1280 /* ShareReplay1WhileConnected.swift */; }; + C8BCD3ED1C14B5FB005F1280 /* UIView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3EC1C14B5FB005F1280 /* UIView+Rx.swift */; }; + C8BCD3EF1C14B5FB005F1280 /* UIView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3EC1C14B5FB005F1280 /* UIView+Rx.swift */; }; + C8BCD3F01C14B5FB005F1280 /* UIView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3EC1C14B5FB005F1280 /* UIView+Rx.swift */; }; + C8BCD3F21C14B62B005F1280 /* NSView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F11C14B62B005F1280 /* NSView+Rx.swift */; }; + C8BCD3F41C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F31C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift */; }; + C8BCD3F51C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F31C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift */; }; + C8BCD3F61C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F31C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift */; }; + C8BCD3F71C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F31C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift */; }; C8C3D9FE1B935EDF004D233E /* Zip+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */; }; C8C3D9FF1B935EDF004D233E /* Zip+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */; }; C8C3DA031B9390C4004D233E /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA021B9390C4004D233E /* Just.swift */; }; @@ -1086,6 +1094,9 @@ C8B144FA1BD2D44500267DCE /* ConcurrentMainScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConcurrentMainScheduler.swift; sourceTree = ""; }; C8B144FF1BD2D80100267DCE /* ImmediateScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmediateScheduler.swift; sourceTree = ""; }; C8BCD3C61C1468D4005F1280 /* ShareReplay1WhileConnected.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareReplay1WhileConnected.swift; sourceTree = ""; }; + C8BCD3EC1C14B5FB005F1280 /* UIView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Rx.swift"; sourceTree = ""; }; + C8BCD3F11C14B62B005F1280 /* NSView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSView+Rx.swift"; sourceTree = ""; }; + C8BCD3F31C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSLayoutConstraint+Rx.swift"; sourceTree = ""; }; C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Zip+CollectionType.swift"; sourceTree = ""; }; C8C3DA021B9390C4004D233E /* Just.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Just.swift; sourceTree = ""; }; C8C3DA051B9393AC004D233E /* Empty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Empty.swift; sourceTree = ""; }; @@ -1454,6 +1465,7 @@ C8DB967D1BF7496C0084BD53 /* KVORepresentable.swift */, C8DB96871BF756F40084BD53 /* KVORepresentable+CoreGraphics.swift */, C8DB968C1BF7595D0084BD53 /* KVORepresentable+Swift.swift */, + C8BCD3F31C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift */, ); path = Common; sourceTree = ""; @@ -1500,6 +1512,7 @@ C8093EC81B8A732E0088E94D /* NSImageView+Rx.swift */, C8093EC91B8A732E0088E94D /* NSSlider+Rx.swift */, C8093ECA1B8A732E0088E94D /* NSTextField+Rx.swift */, + C8BCD3F11C14B62B005F1280 /* NSView+Rx.swift */, ); path = OSX; sourceTree = ""; @@ -1569,6 +1582,7 @@ C88254131B8A752B00B02D69 /* UITextField+Rx.swift */, C88254141B8A752B00B02D69 /* UITextView+Rx.swift */, 9BA1CBD11C0F7C0A0044B50A /* UIActivityIndicatorView+Rx.swift */, + C8BCD3EC1C14B5FB005F1280 /* UIView+Rx.swift */, ); path = iOS; sourceTree = ""; @@ -2154,6 +2168,7 @@ C882541D1B8A752B00B02D69 /* RxAlertViewDelegateProxy.swift in Sources */, C80DDEA71BCE69BA006A1832 /* ObservableConvertibleType+Driver.swift in Sources */, C80DDE9F1BCE69BA006A1832 /* Driver+Subscription.swift in Sources */, + C8BCD3ED1C14B5FB005F1280 /* UIView+Rx.swift in Sources */, C80D338F1B91EF9E0014629D /* Observable+Bind.swift in Sources */, C88254311B8A752B00B02D69 /* UISegmentedControl+Rx.swift in Sources */, C8093EED1B8A732E0088E94D /* KVOObservable.swift in Sources */, @@ -2174,6 +2189,7 @@ C882542B1B8A752B00B02D69 /* UIDatePicker+Rx.swift in Sources */, C88254221B8A752B00B02D69 /* RxTableViewDataSourceProxy.swift in Sources */, C8093EDD1B8A732E0088E94D /* _RXSwizzling.m in Sources */, + C8BCD3F41C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */, C8093EE91B8A732E0088E94D /* Deallocating.swift in Sources */, C882542C1B8A752B00B02D69 /* UIGestureRecognizer+Rx.swift in Sources */, C8093EE11B8A732E0088E94D /* DelegateProxy.swift in Sources */, @@ -2213,6 +2229,7 @@ C80D33991B922FB00014629D /* ControlEvent.swift in Sources */, C80DDEA81BCE69BA006A1832 /* ObservableConvertibleType+Driver.swift in Sources */, C80D339B1B922FB00014629D /* ControlProperty.swift in Sources */, + C8BCD3F51C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */, C8093EF41B8A732E0088E94D /* NSObject+Rx+CoreGraphics.swift in Sources */, C8093EF01B8A732E0088E94D /* KVOObserver.swift in Sources */, C8093EEE1B8A732E0088E94D /* KVOObservable.swift in Sources */, @@ -2228,6 +2245,7 @@ C8093EDE1B8A732E0088E94D /* _RXSwizzling.m in Sources */, C80DDE941BCE69BA006A1832 /* ControlEvent+Driver.swift in Sources */, C80DDEB21BCE8CA3006A1832 /* Driver+Operators+arity.swift in Sources */, + C8BCD3F21C14B62B005F1280 /* NSView+Rx.swift in Sources */, C8093EEA1B8A732E0088E94D /* Deallocating.swift in Sources */, C8093EE21B8A732E0088E94D /* DelegateProxy.swift in Sources */, C8093EFA1B8A732E0088E94D /* RxCLLocationManagerDelegateProxy.swift in Sources */, @@ -2719,6 +2737,7 @@ C8F0C01E1BBBFBB9001B112F /* RxAlertViewDelegateProxy.swift in Sources */, C80DDEAA1BCE69BA006A1832 /* ObservableConvertibleType+Driver.swift in Sources */, C80DDEA21BCE69BA006A1832 /* Driver+Subscription.swift in Sources */, + C8BCD3F01C14B5FB005F1280 /* UIView+Rx.swift in Sources */, C8F0C01F1BBBFBB9001B112F /* Observable+Bind.swift in Sources */, C8F0C0201BBBFBB9001B112F /* UISegmentedControl+Rx.swift in Sources */, C8F0C0211BBBFBB9001B112F /* KVOObservable.swift in Sources */, @@ -2739,6 +2758,7 @@ C8F0C02C1BBBFBB9001B112F /* UIDatePicker+Rx.swift in Sources */, C8F0C02D1BBBFBB9001B112F /* RxTableViewDataSourceProxy.swift in Sources */, C8F0C02E1BBBFBB9001B112F /* _RXSwizzling.m in Sources */, + C8BCD3F71C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */, C8F0C02F1BBBFBB9001B112F /* Deallocating.swift in Sources */, C8F0C0301BBBFBB9001B112F /* UIGestureRecognizer+Rx.swift in Sources */, C8F0C0311BBBFBB9001B112F /* DelegateProxy.swift in Sources */, @@ -2806,6 +2826,7 @@ C80DDEA91BCE69BA006A1832 /* ObservableConvertibleType+Driver.swift in Sources */, C80DDEA11BCE69BA006A1832 /* Driver+Subscription.swift in Sources */, D2138C891BB9BEBE00339B5C /* DelegateProxyType.swift in Sources */, + C8BCD3EF1C14B5FB005F1280 /* UIView+Rx.swift in Sources */, D2138C921BB9BED600339B5C /* KVOObserver.swift in Sources */, D2138C831BB9BEBE00339B5C /* _RXKVOObserver.m in Sources */, C80DDEB31BCE8CA3006A1832 /* Driver+Operators+arity.swift in Sources */, @@ -2826,6 +2847,7 @@ D203C50A1BB9C53E00D02D00 /* UILabel+Rx.swift in Sources */, D2138C901BB9BED600339B5C /* DeinitAction.swift in Sources */, D203C4F51BB9C52900D02D00 /* ItemEvents.swift in Sources */, + C8BCD3F61C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */, D2138C911BB9BED600339B5C /* KVOObservable.swift in Sources */, D203C4FA1BB9C53700D02D00 /* RxCollectionViewDataSourceProxy.swift in Sources */, D2138C7F1BB9BEBE00339B5C /* _RX.m in Sources */, diff --git a/RxExample/RxExample.xcodeproj/project.pbxproj b/RxExample/RxExample.xcodeproj/project.pbxproj index cd7436c5..e92c4788 100644 --- a/RxExample/RxExample.xcodeproj/project.pbxproj +++ b/RxExample/RxExample.xcodeproj/project.pbxproj @@ -326,6 +326,17 @@ C8A7501F1B94E77C00D8D046 /* RxDataSourceStarterKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A7501E1B94E77C00D8D046 /* RxDataSourceStarterKit.swift */; }; C8A750201B94E78200D8D046 /* RxDataSourceStarterKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A7501E1B94E77C00D8D046 /* RxDataSourceStarterKit.swift */; }; C8BCD3CE1C14756F005F1280 /* ShareReplay1WhileConnected.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3CD1C14756F005F1280 /* ShareReplay1WhileConnected.swift */; }; + C8BCD3DC1C1480A9005F1280 /* GithubValidationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3DB1C1480A9005F1280 /* GithubValidationService.swift */; }; + C8BCD3DD1C1480A9005F1280 /* GithubValidationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3DB1C1480A9005F1280 /* GithubValidationService.swift */; }; + C8BCD3DF1C1480E9005F1280 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3DE1C1480E9005F1280 /* Operators.swift */; }; + C8BCD3E01C1480E9005F1280 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3DE1C1480E9005F1280 /* Operators.swift */; }; + C8BCD3E31C14820B005F1280 /* IntroductionExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */; }; + C8BCD3E61C14A95E005F1280 /* NumbersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E51C14A95E005F1280 /* NumbersViewController.swift */; }; + C8BCD3E71C14A95E005F1280 /* NumbersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E51C14A95E005F1280 /* NumbersViewController.swift */; }; + C8BCD3EA1C14B02A005F1280 /* SimpleValidationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E91C14B02A005F1280 /* SimpleValidationViewController.swift */; }; + C8BCD3EB1C14B02A005F1280 /* SimpleValidationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E91C14B02A005F1280 /* SimpleValidationViewController.swift */; }; + C8BCD4021C14BFB7005F1280 /* NSLayoutConstraint+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD4011C14BFB7005F1280 /* NSLayoutConstraint+Rx.swift */; }; + C8BCD4041C14BFCA005F1280 /* UIView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD4031C14BFCA005F1280 /* UIView+Rx.swift */; }; C8C46DA81B47F7110020D71E /* CollectionViewImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C46DA31B47F7110020D71E /* CollectionViewImageCell.swift */; }; C8C46DA91B47F7110020D71E /* WikipediaImageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C8C46DA41B47F7110020D71E /* WikipediaImageCell.xib */; }; C8C46DAA1B47F7110020D71E /* WikipediaSearchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C46DA51B47F7110020D71E /* WikipediaSearchCell.swift */; }; @@ -339,7 +350,6 @@ C8DF92E71B0B32F2009BCF9A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E61B0B32F2009BCF9A /* Main.storyboard */; }; C8DF92EA1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; }; C8DF92EB1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; }; - C8DF92F61B0B43A4009BCF9A /* IntroductionExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DF92F51B0B43A4009BCF9A /* IntroductionExampleViewController.swift */; }; C8E9D2AF1BD3FD960079D0DB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */; }; C8F6A1271BEF9DA3007DF367 /* AnonymousInvocable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F6A1041BEF9D83007DF367 /* AnonymousInvocable.swift */; }; C8F6A1281BEF9DA3007DF367 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F6A1051BEF9D83007DF367 /* InvocableScheduledItem.swift */; }; @@ -746,6 +756,13 @@ C8B145041BD2E45200267DCE /* ImmediateScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmediateScheduler.swift; sourceTree = ""; }; C8B145051BD2E45200267DCE /* ConcurrentMainScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConcurrentMainScheduler.swift; sourceTree = ""; }; C8BCD3CD1C14756F005F1280 /* ShareReplay1WhileConnected.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareReplay1WhileConnected.swift; sourceTree = ""; }; + C8BCD3DB1C1480A9005F1280 /* GithubValidationService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubValidationService.swift; sourceTree = ""; }; + C8BCD3DE1C1480E9005F1280 /* Operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operators.swift; sourceTree = ""; }; + C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntroductionExampleViewController.swift; sourceTree = ""; }; + C8BCD3E51C14A95E005F1280 /* NumbersViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumbersViewController.swift; sourceTree = ""; }; + C8BCD3E91C14B02A005F1280 /* SimpleValidationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleValidationViewController.swift; sourceTree = ""; }; + C8BCD4011C14BFB7005F1280 /* NSLayoutConstraint+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSLayoutConstraint+Rx.swift"; sourceTree = ""; }; + C8BCD4031C14BFCA005F1280 /* UIView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Rx.swift"; sourceTree = ""; }; C8C46DA31B47F7110020D71E /* CollectionViewImageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewImageCell.swift; sourceTree = ""; }; C8C46DA41B47F7110020D71E /* WikipediaImageCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WikipediaImageCell.xib; sourceTree = ""; }; C8C46DA51B47F7110020D71E /* WikipediaSearchCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WikipediaSearchCell.swift; sourceTree = ""; }; @@ -760,7 +777,6 @@ C8DF92E91B0B38C0009BCF9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; C8DF92F01B0B3E67009BCF9A /* Info-OSX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-OSX.plist"; sourceTree = ""; }; C8DF92F21B0B3E71009BCF9A /* Info-iOS.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = ""; }; - C8DF92F51B0B43A4009BCF9A /* IntroductionExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = IntroductionExampleViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8F6A1041BEF9D83007DF367 /* AnonymousInvocable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousInvocable.swift; sourceTree = ""; }; C8F6A1051BEF9D83007DF367 /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InvocableScheduledItem.swift; sourceTree = ""; }; C8F6A1061BEF9D83007DF367 /* InvocableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InvocableType.swift; sourceTree = ""; }; @@ -835,32 +851,29 @@ name = UIKitExtensions; sourceTree = ""; }; - 075F130E1B4E9D10000D7861 /* 04 APIWrappers */ = { + 075F130E1B4E9D10000D7861 /* APIWrappers */ = { isa = PBXGroup; children = ( 075F130F1B4E9D5A000D7861 /* APIWrappersViewController.swift */, ); - name = "04 APIWrappers"; path = APIWrappers; sourceTree = ""; }; - 07A5C3D91B70B6B8001EFE5C /* 06 Calculator */ = { + 07A5C3D91B70B6B8001EFE5C /* Calculator */ = { isa = PBXGroup; children = ( 07A5C3DA1B70B703001EFE5C /* CalculatorViewController.swift */, ); - name = "06 Calculator"; path = Calculator; sourceTree = ""; }; - 07E300051B14994500F00100 /* 05 TableView */ = { + 07E300051B14994500F00100 /* TableView */ = { isa = PBXGroup; children = ( 0706E1A01B1770C800BA2D3A /* RandomUserAPI */, 0706E1A11B1770D300BA2D3A /* Controllers */, 0706E1A21B1770E200BA2D3A /* UIKitExtensions */, ); - name = "05 TableView"; path = TableView; sourceTree = ""; }; @@ -928,6 +941,7 @@ C8DF92E91B0B38C0009BCF9A /* Images.xcassets */, C86E2F2E1AE5A0CA00C31024 /* Examples */, C83367101AD029AE00C668A7 /* Services */, + C8BCD3DE1C1480E9005F1280 /* Operators.swift */, 07E3C2321B03605B0010338D /* Dependencies.swift */, C890A65C1AEC084100AFF7E6 /* ViewController.swift */, C833670F1AD029AE00C668A7 /* Example.swift */, @@ -974,40 +988,40 @@ name = NoModule; sourceTree = ""; }; - C859B9A21B45C5D900D012D7 /* 07 PartialUpdates */ = { + C859B9A21B45C5D900D012D7 /* PartialUpdates */ = { isa = PBXGroup; children = ( C859B9A31B45C5D900D012D7 /* PartialUpdatesViewController.swift */, C859B9AB1B45CF9100D012D7 /* NumberCell.swift */, C859B9AD1B45CFAB00D012D7 /* NumberSectionView.swift */, ); - name = "07 PartialUpdates"; path = PartialUpdates; sourceTree = ""; }; C86E2F2E1AE5A0CA00C31024 /* Examples */ = { isa = PBXGroup; children = ( - C8DF92F41B0B4392009BCF9A /* 01 Introduction */, - C86E2F4C1AE5A10900C31024 /* 02 GitHubSignup */, - C86E2F301AE5A0CA00C31024 /* 03 WikipediaImageSearch */, - 075F130E1B4E9D10000D7861 /* 04 APIWrappers */, - 07E300051B14994500F00100 /* 05 TableView */, - 07A5C3D91B70B6B8001EFE5C /* 06 Calculator */, - C859B9A21B45C5D900D012D7 /* 07 PartialUpdates */, - EC91FB931BBA12E800973245 /* 08 AutoLoading */, + C8BCD3E41C14A950005F1280 /* Numbers */, + C8BCD3E81C14B015005F1280 /* SimpleValidation */, + C8BCD3E11C14820B005F1280 /* OSX simple example */, + C86E2F4C1AE5A10900C31024 /* GitHubSignup */, + C86E2F301AE5A0CA00C31024 /* WikipediaImageSearch */, + 075F130E1B4E9D10000D7861 /* APIWrappers */, + 07E300051B14994500F00100 /* TableView */, + 07A5C3D91B70B6B8001EFE5C /* Calculator */, + C859B9A21B45C5D900D012D7 /* PartialUpdates */, + EC91FB931BBA12E800973245 /* AutoLoading */, ); path = Examples; sourceTree = ""; }; - C86E2F301AE5A0CA00C31024 /* 03 WikipediaImageSearch */ = { + C86E2F301AE5A0CA00C31024 /* WikipediaImageSearch */ = { isa = PBXGroup; children = ( C86E2F311AE5A0CA00C31024 /* ViewModels */, C86E2F341AE5A0CA00C31024 /* Views */, C86E2F3A1AE5A0CA00C31024 /* WikipediaAPI */, ); - name = "03 WikipediaImageSearch"; path = WikipediaImageSearch; sourceTree = ""; }; @@ -1041,13 +1055,13 @@ path = WikipediaAPI; sourceTree = ""; }; - C86E2F4C1AE5A10900C31024 /* 02 GitHubSignup */ = { + C86E2F4C1AE5A10900C31024 /* GitHubSignup */ = { isa = PBXGroup; children = ( C890A6571AEBD26B00AFF7E6 /* GitHubSignupViewController.swift */, C890A6591AEBD28A00AFF7E6 /* GitHubAPI.swift */, + C8BCD3DB1C1480A9005F1280 /* GithubValidationService.swift */, ); - name = "02 GitHubSignup"; path = GitHubSignup; sourceTree = ""; }; @@ -1306,6 +1320,7 @@ C894650D1BC6C2BC0055219D /* Common */ = { isa = PBXGroup; children = ( + C8BCD4011C14BFB7005F1280 /* NSLayoutConstraint+Rx.swift */, C839740F1BF77406004F02CC /* KVORepresentable.swift */, C83974101BF77406004F02CC /* KVORepresentable+CoreGraphics.swift */, C83974111BF77406004F02CC /* KVORepresentable+Swift.swift */, @@ -1382,6 +1397,7 @@ C89465381BC6C2BC0055219D /* Events */, C894653A1BC6C2BC0055219D /* Protocols */, C894653D1BC6C2BC0055219D /* Proxies */, + C8BCD4031C14BFCA005F1280 /* UIView+Rx.swift */, C89465471BC6C2BC0055219D /* UIActionSheet+Rx.swift */, C89465481BC6C2BC0055219D /* UIAlertView+Rx.swift */, C89465491BC6C2BC0055219D /* UIBarButtonItem+Rx.swift */, @@ -1448,6 +1464,30 @@ path = Proxies; sourceTree = ""; }; + C8BCD3E11C14820B005F1280 /* OSX simple example */ = { + isa = PBXGroup; + children = ( + C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */, + ); + path = "OSX simple example"; + sourceTree = ""; + }; + C8BCD3E41C14A950005F1280 /* Numbers */ = { + isa = PBXGroup; + children = ( + C8BCD3E51C14A95E005F1280 /* NumbersViewController.swift */, + ); + path = Numbers; + sourceTree = ""; + }; + C8BCD3E81C14B015005F1280 /* SimpleValidation */ = { + isa = PBXGroup; + children = ( + C8BCD3E91C14B02A005F1280 /* SimpleValidationViewController.swift */, + ); + path = SimpleValidation; + sourceTree = ""; + }; C8DF92C71B0B2F84009BCF9A /* iOS */ = { isa = PBXGroup; children = ( @@ -1468,22 +1508,12 @@ path = OSX; sourceTree = ""; }; - C8DF92F41B0B4392009BCF9A /* 01 Introduction */ = { - isa = PBXGroup; - children = ( - C8DF92F51B0B43A4009BCF9A /* IntroductionExampleViewController.swift */, - ); - name = "01 Introduction"; - path = Introduction; - sourceTree = ""; - }; - EC91FB931BBA12E800973245 /* 08 AutoLoading */ = { + EC91FB931BBA12E800973245 /* AutoLoading */ = { isa = PBXGroup; children = ( EC91FB941BBA144400973245 /* GitHubSearchRepositoriesViewController.swift */, C80397481BD3E9A6009D8B26 /* GitHubSearchRepositoriesAPI.swift */, ); - name = "08 AutoLoading"; path = AutoLoading; sourceTree = ""; }; @@ -1735,7 +1765,9 @@ C894650B1BC6C2B00055219D /* Variable.swift in Sources */, C8297E311B6CF905000589EA /* SearchResultViewModel.swift in Sources */, C8F6A12D1BEF9DA3007DF367 /* CurrentThreadScheduler.swift in Sources */, + C8BCD3EB1C14B02A005F1280 /* SimpleValidationViewController.swift in Sources */, C89464D91BC6C2B00055219D /* RefCount.swift in Sources */, + C8BCD3E71C14A95E005F1280 /* NumbersViewController.swift in Sources */, C89465731BC6C2BC0055219D /* Deallocating.swift in Sources */, C8F6A1271BEF9DA3007DF367 /* AnonymousInvocable.swift in Sources */, C89464A51BC6C2B00055219D /* Disposable.swift in Sources */, @@ -1805,6 +1837,7 @@ C894657C1BC6C2BC0055219D /* RxCocoa.swift in Sources */, C894658F1BC6C2BC0055219D /* UIBarButtonItem+Rx.swift in Sources */, C89464D61BC6C2B00055219D /* Producer.swift in Sources */, + C8BCD4041C14BFCA005F1280 /* UIView+Rx.swift in Sources */, C894658A1BC6C2BC0055219D /* RxTableViewDataSourceProxy.swift in Sources */, C894656F1BC6C2BC0055219D /* DelegateProxyType.swift in Sources */, C89465721BC6C2BC0055219D /* ControlTarget.swift in Sources */, @@ -1850,6 +1883,7 @@ CBEE77541BD8C7B700AD584C /* ToArray.swift in Sources */, C89465771BC6C2BC0055219D /* NSNotificationCenter+Rx.swift in Sources */, C89465091BC6C2B00055219D /* ReplaySubject.swift in Sources */, + C8BCD3E01C1480E9005F1280 /* Operators.swift in Sources */, C8F6A1281BEF9DA3007DF367 /* InvocableScheduledItem.swift in Sources */, C8297E411B6CF905000589EA /* RxCollectionViewSectionedReloadDataSource.swift in Sources */, C84CC58E1BDD486300E06A64 /* SynchronizedSubscribeType.swift in Sources */, @@ -1913,6 +1947,7 @@ C8F6A12A1BEF9DA3007DF367 /* ScheduledItemType.swift in Sources */, C8F6A1351BEF9DA3007DF367 /* SerialDispatchQueueScheduler.swift in Sources */, C8297E4D1B6CF905000589EA /* RxTableViewSectionedReloadDataSource.swift in Sources */, + C8BCD3DD1C1480A9005F1280 /* GithubValidationService.swift in Sources */, C89465931BC6C2BC0055219D /* UIDatePicker+Rx.swift in Sources */, C84CC58F1BDD486300E06A64 /* SynchronizedUnsubscribeType.swift in Sources */, C8297E4E1B6CF905000589EA /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */, @@ -1934,6 +1969,7 @@ C803973B1BD3E17D009D8B26 /* ActivityIndicator.swift in Sources */, C89464C61BC6C2B00055219D /* Deferred.swift in Sources */, CB883B611BE3AC72000AC2EE /* AddRef.swift in Sources */, + C8BCD4021C14BFB7005F1280 /* NSLayoutConstraint+Rx.swift in Sources */, D2AF91981BD3D95900A008C1 /* Using.swift in Sources */, C8297E501B6CF905000589EA /* TableViewController.swift in Sources */, C8297E511B6CF905000589EA /* PartialUpdatesViewController.swift in Sources */, @@ -1996,9 +2032,11 @@ 0706E19D1B176EE200BA2D3A /* String+extensions.swift in Sources */, C84B913B1B8A282000C9CCCF /* RxCollectionViewSectionedReloadDataSource.swift in Sources */, C88C78731B3EB0A00061C5AB /* SectionModel.swift in Sources */, + C8BCD3DF1C1480E9005F1280 /* Operators.swift in Sources */, C803973A1BD3E17D009D8B26 /* ActivityIndicator.swift in Sources */, C84B913D1B8A282000C9CCCF /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */, C8A750201B94E78200D8D046 /* RxDataSourceStarterKit.swift in Sources */, + C8BCD3E61C14A95E005F1280 /* NumbersViewController.swift in Sources */, C809E97A1BE6841C0058D948 /* Wireframe.swift in Sources */, 0706E1961B14AF5100BA2D3A /* DetailViewController.swift in Sources */, C88C78991B4012A90061C5AB /* SectionModelType.swift in Sources */, @@ -2019,6 +2057,7 @@ B1604CB51BE49F8D002E1279 /* DownloadableImage.swift in Sources */, 075F13101B4E9D5A000D7861 /* APIWrappersViewController.swift in Sources */, 07E300071B14995F00F00100 /* TableViewController.swift in Sources */, + C8BCD3DC1C1480A9005F1280 /* GithubValidationService.swift in Sources */, B18F3BE21BDB2E8F000AAC79 /* ReachabilityService.swift in Sources */, B18F3BBC1BD92EC8000AAC79 /* Reachability.swift in Sources */, C87335771BF7CC0B00E536E6 /* ObservableConvertibleType+Differentiator.swift in Sources */, @@ -2030,6 +2069,7 @@ C86E2F461AE5A0CA00C31024 /* WikipediaPage.swift in Sources */, C809E97D1BE697100058D948 /* UIImage+Extensions.swift in Sources */, C8A2A2CB1B404A1200F11F09 /* Randomizer.swift in Sources */, + C8BCD3EA1C14B02A005F1280 /* SimpleValidationViewController.swift in Sources */, 07E300091B149A2A00F00100 /* User.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2038,6 +2078,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C8BCD3E31C14820B005F1280 /* IntroductionExampleViewController.swift in Sources */, C809E97F1BE69B660058D948 /* Wireframe.swift in Sources */, C809E9841BE69C350058D948 /* Driver+Operators.swift in Sources */, C8DF92DF1B0B328B009BCF9A /* AppDelegate.swift in Sources */, @@ -2053,7 +2094,6 @@ C809E9811BE69C310058D948 /* ControlEvent+Driver.swift in Sources */, C809E9831BE69C310058D948 /* Driver+Operators+arity.swift in Sources */, C88BB8BF1B07E6C90064D411 /* WikipediaSearchResult.swift in Sources */, - C8DF92F61B0B43A4009BCF9A /* IntroductionExampleViewController.swift in Sources */, B18F3BBF1BD93DFF000AAC79 /* Reachability.swift in Sources */, C88BB8C31B07E6C90064D411 /* Example.swift in Sources */, C88BB8C41B07E6C90064D411 /* ViewController.swift in Sources */, diff --git a/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift b/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift index 479940ca..624df0d2 100644 --- a/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift +++ b/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift @@ -51,8 +51,6 @@ class APIWrappersViewController: ViewController { @IBOutlet weak var mypan: UIPanGestureRecognizer! - let disposeBag = DisposeBag() - let manager = CLLocationManager() override func viewDidLoad() { diff --git a/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift b/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift index c41bfc90..f0c4d5f6 100644 --- a/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift +++ b/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift @@ -49,7 +49,6 @@ class GitHubSearchRepositoriesViewController: ViewController, UITableViewDelegat @IBOutlet weak var tableView: UITableView! @IBOutlet weak var searchBar: UISearchBar! - var disposeBag = DisposeBag() let dataSource = RxTableViewSectionedReloadDataSource>() override func viewDidLoad() { diff --git a/RxExample/RxExample/Examples/Calculator/CalculatorViewController.swift b/RxExample/RxExample/Examples/Calculator/CalculatorViewController.swift index 201e8327..9fa716fb 100644 --- a/RxExample/RxExample/Examples/Calculator/CalculatorViewController.swift +++ b/RxExample/RxExample/Examples/Calculator/CalculatorViewController.swift @@ -67,8 +67,6 @@ class CalculatorViewController: ViewController { let CLEAR_STATE = CalState(previousNumber: nil, action: .Clear, currentNumber: "0", inScreen: "0", replace: true) - let disposeBag = DisposeBag() - override func viewDidLoad() { let commands:[Observable] = [ allClearButton.rx_tap.map { _ in .Clear }, diff --git a/RxExample/RxExample/Examples/GitHubSignup/GithubValidationService.swift b/RxExample/RxExample/Examples/GitHubSignup/GithubValidationService.swift index 367cda98..9667036b 100644 --- a/RxExample/RxExample/Examples/GitHubSignup/GithubValidationService.swift +++ b/RxExample/RxExample/Examples/GitHubSignup/GithubValidationService.swift @@ -7,7 +7,11 @@ // import Foundation +#if !RX_NO_MODULE import RxSwift +#endif + +typealias ValidationObservable = Observable class ValidationService { let API: GitHubAPI diff --git a/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift b/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift index f544ca67..b3ff4174 100644 --- a/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift +++ b/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift @@ -14,90 +14,6 @@ import RxCocoa #endif typealias ValidationResult = (valid: Bool?, message: String?) -typealias ValidationObservable = Observable - -// Two way binding operator between control property and variable, that's all it takes { - -infix operator <-> { -} - -func <-> (property: ControlProperty, variable: Variable) -> Disposable { - let bindToUIDisposable = variable - .bindTo(property) - let bindToVariable = property - .subscribe(onNext: { n in - variable.value = n - }, onCompleted: { - bindToUIDisposable.dispose() - }) - - return StableCompositeDisposable.create(bindToUIDisposable, bindToVariable) -} - -// } - - -class ValidationService { - let API: GitHubAPI - - init (API: GitHubAPI) { - self.API = API - } - - // validation - - let minPasswordCount = 5 - - func validateUsername(username: String) -> ValidationObservable { - if username.characters.count == 0 { - return just((false, nil)) - } - - // this obviously won't be - if username.rangeOfCharacterFromSet(NSCharacterSet.alphanumericCharacterSet().invertedSet) != nil { - return just((false, "Username can only contain numbers or digits")) - } - - let loadingValue = (valid: nil as Bool?, message: "Checking availabilty ..." as String?) - - return API.usernameAvailable(username) - .map { available in - if available { - return (true, "Username available") - } - else { - return (false, "Username already taken") - } - } - .startWith(loadingValue) - } - - func validatePassword(password: String) -> ValidationResult { - let numberOfCharacters = password.characters.count - if numberOfCharacters == 0 { - return (false, nil) - } - - if numberOfCharacters < minPasswordCount { - return (false, "Password must be at least \(minPasswordCount) characters") - } - - return (true, "Password acceptable") - } - - func validateRepeatedPassword(password: String, repeatedPassword: String) -> ValidationResult { - if repeatedPassword.characters.count == 0 { - return (false, nil) - } - - if repeatedPassword == password { - return (true, "Password repeated") - } - else { - return (false, "Password different") - } - } -} class GitHubSignupViewController : ViewController { @IBOutlet weak var usernameOutlet: UITextField! @@ -121,8 +37,6 @@ class GitHubSignupViewController : ViewController { static let errorColor = UIColor.redColor() } - var disposeBag = DisposeBag() - let API = GitHubAPI( dataScheduler: MainScheduler.sharedInstance, URLSession: NSURLSession.sharedSession() diff --git a/RxExample/RxExample/Examples/Numbers/NumbersViewController.swift b/RxExample/RxExample/Examples/Numbers/NumbersViewController.swift index 8285cc34..1039e865 100644 --- a/RxExample/RxExample/Examples/Numbers/NumbersViewController.swift +++ b/RxExample/RxExample/Examples/Numbers/NumbersViewController.swift @@ -7,3 +7,27 @@ // import Foundation +import UIKit +#if !RX_NO_MODULE +import RxSwift +import RxCocoa +#endif + +class NumbersViewController: ViewController { + @IBOutlet weak var number1: UITextField! + @IBOutlet weak var number2: UITextField! + @IBOutlet weak var number3: UITextField! + + @IBOutlet weak var result: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + + combineLatest(number1.rx_text, number2.rx_text, number3.rx_text) { textValue1, textValue2, textValue3 -> Int in + return (Int(textValue1) ?? 0) + (Int(textValue2) ?? 0) + (Int(textValue3) ?? 0) + } + .map { $0.description } + .bindTo(result.rx_text) + .addDisposableTo(disposeBag) + } +} diff --git a/RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift b/RxExample/RxExample/Examples/OSX simple example/IntroductionExampleViewController.swift similarity index 98% rename from RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift rename to RxExample/RxExample/Examples/OSX simple example/IntroductionExampleViewController.swift index 268c857e..5a79bc2e 100644 --- a/RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift +++ b/RxExample/RxExample/Examples/OSX simple example/IntroductionExampleViewController.swift @@ -21,8 +21,6 @@ class IntroductionExampleViewController : ViewController { @IBOutlet var disposeButton: NSButton! - var disposeBag = DisposeBag() - override func viewDidLoad() { super.viewDidLoad() diff --git a/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift b/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift index 5dc9e998..79f83595 100644 --- a/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift +++ b/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift @@ -49,8 +49,6 @@ class PartialUpdatesViewController : ViewController { var sections = Variable([NumberSection]()) - let disposeBag = DisposeBag() - func skinTableViewDataSource(dataSource: RxTableViewSectionedDataSource) { dataSource.cellFactory = { (tv, ip, i) in let cell = tv.dequeueReusableCellWithIdentifier("Cell") diff --git a/RxExample/RxExample/Examples/SimpleValidation/SimpleValidationViewController.swift b/RxExample/RxExample/Examples/SimpleValidation/SimpleValidationViewController.swift index a6316f57..4f9ad5fe 100644 --- a/RxExample/RxExample/Examples/SimpleValidation/SimpleValidationViewController.swift +++ b/RxExample/RxExample/Examples/SimpleValidation/SimpleValidationViewController.swift @@ -8,8 +8,10 @@ import Foundation import UIKit +#if !RX_NO_MODULE import RxSwift import RxCocoa +#endif let mininalUsernameLength = 5 let mininalPasswordLength = 5 diff --git a/RxExample/RxExample/Examples/TableView/DetailViewController.swift b/RxExample/RxExample/Examples/TableView/DetailViewController.swift index e9f24737..6765b5ab 100644 --- a/RxExample/RxExample/Examples/TableView/DetailViewController.swift +++ b/RxExample/RxExample/Examples/TableView/DetailViewController.swift @@ -18,8 +18,6 @@ class DetailViewController: ViewController { let $ = Dependencies.sharedDependencies - var disposeBag = DisposeBag() - @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var label: UILabel! diff --git a/RxExample/RxExample/Examples/TableView/TableViewController.swift b/RxExample/RxExample/Examples/TableView/TableViewController.swift index 6245a79b..25751b52 100644 --- a/RxExample/RxExample/Examples/TableView/TableViewController.swift +++ b/RxExample/RxExample/Examples/TableView/TableViewController.swift @@ -17,8 +17,6 @@ class TableViewController: ViewController, UITableViewDelegate { @IBOutlet weak var tableView: UITableView! - var disposeBag = DisposeBag() - let users = Variable([User]()) let favoriteUsers = Variable([User]()) diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift index 69811389..12e1405a 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift @@ -14,8 +14,6 @@ import RxCocoa class WikipediaSearchViewController: ViewController { - private var disposeBag = DisposeBag() - private var resultsTableView: UITableView { return self.searchDisplayController!.searchResultsTableView } diff --git a/RxExample/RxExample/OSX/Main.storyboard b/RxExample/RxExample/OSX/Main.storyboard index a54c6b13..897bff83 100644 --- a/RxExample/RxExample/OSX/Main.storyboard +++ b/RxExample/RxExample/OSX/Main.storyboard @@ -1,7 +1,7 @@ - + - + diff --git a/RxExample/RxExample/Operators.swift b/RxExample/RxExample/Operators.swift index fc2afe32..99f5cd3a 100644 --- a/RxExample/RxExample/Operators.swift +++ b/RxExample/RxExample/Operators.swift @@ -7,3 +7,28 @@ // import Foundation +#if !RX_NO_MODULE +import RxSwift +import RxCocoa +#endif + +// Two way binding operator between control property and variable, that's all it takes { + +infix operator <-> { +} + +func <-> (property: ControlProperty, variable: Variable) -> Disposable { + let bindToUIDisposable = variable + .bindTo(property) + let bindToVariable = property + .subscribe(onNext: { n in + variable.value = n + }, onCompleted: { + bindToUIDisposable.dispose() + }) + + return StableCompositeDisposable.create(bindToUIDisposable, bindToVariable) +} + +// } + diff --git a/RxExample/RxExample/ViewController.swift b/RxExample/RxExample/ViewController.swift index 4af5a08f..f9e00b5e 100644 --- a/RxExample/RxExample/ViewController.swift +++ b/RxExample/RxExample/ViewController.swift @@ -27,7 +27,9 @@ class ViewController: OSViewController { private let startResourceCount = resourceCount #endif #endif - + + var disposeBag = DisposeBag() + override func viewDidLoad() { #if TRACE_RESOURCES print("Number of start resources = \(resourceCount)") diff --git a/RxExample/RxExample/iOS/Main.storyboard b/RxExample/RxExample/iOS/Main.storyboard index 343a7ada..42f0b55d 100644 --- a/RxExample/RxExample/iOS/Main.storyboard +++ b/RxExample/RxExample/iOS/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -24,6 +24,25 @@ + + + + + + + + + + + + + + + + + + + @@ -434,10 +453,44 @@ - + + + + + + + + + + + + + + + + + + + + + - + @@ -467,101 +520,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -591,8 +551,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -627,7 +688,7 @@ - + @@ -819,6 +880,7 @@ This is only showcase app, not intended for production purposes. @@ -853,6 +915,102 @@ This is only showcase app, not intended for production purposes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RxTests/RxCocoaTests/Control+RxTests+UIKit.swift b/RxTests/RxCocoaTests/Control+RxTests+UIKit.swift index e8c45f29..0f236cd4 100644 --- a/RxTests/RxCocoaTests/Control+RxTests+UIKit.swift +++ b/RxTests/RxCocoaTests/Control+RxTests+UIKit.swift @@ -14,21 +14,17 @@ import XCTest extension ControlTests { func testSubscribeEnabledToTrue() { let subject = UIControl() - let enabledSequence = Variable(false) - let disposable = enabledSequence.subscribe(subject.rx_enabled) + let disposable = just(true).subscribe(subject.rx_enabled) defer { disposable.dispose() } - enabledSequence.value = true XCTAssert(subject.enabled == true, "Expected enabled set to true") } func testSubscribeEnabledToFalse() { let subject = UIControl() - let enabledSequence = Variable(true) - let disposable = enabledSequence.subscribe(subject.rx_enabled) + let disposable = just(false).subscribe(subject.rx_enabled) defer { disposable.dispose() } - enabledSequence.value = false XCTAssert(subject.enabled == false, "Expected enabled set to false") } } diff --git a/RxTests/RxCocoaTests/NSLayoutConstraint+RxTests.swift b/RxTests/RxCocoaTests/NSLayoutConstraint+RxTests.swift index 5256be16..4f15e668 100644 --- a/RxTests/RxCocoaTests/NSLayoutConstraint+RxTests.swift +++ b/RxTests/RxCocoaTests/NSLayoutConstraint+RxTests.swift @@ -7,3 +7,37 @@ // import Foundation +import RxSwift +import RxCocoa +import XCTest +#if os(OSX) +import Cocoa +typealias View = NSView +#else +import UIKit +typealias View = UIView +#endif + +class NSLayoutConstraintTest : RxTest { +} + + +extension NSLayoutConstraintTest { + func testConstant_0() { + let subject = View(frame: CGRect.zero) + let subject2 = View(frame: CGRect.zero) + let constraint = NSLayoutConstraint(item: subject, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: subject2, attribute: NSLayoutAttribute.Top, multiplier: 0.5, constant: 0.5) + just(0).subscribe(constraint.rx_constant).dispose() + + XCTAssertTrue(constraint.constant == 0.0) + } + + func testConstant_1() { + let subject = View(frame: CGRect.zero) + let subject2 = View(frame: CGRect.zero) + let constraint = NSLayoutConstraint(item: subject, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: subject2, attribute: NSLayoutAttribute.Top, multiplier: 0.5, constant: 0.5) + just(1.0).subscribe(constraint.rx_constant).dispose() + + XCTAssertTrue(constraint.constant == 1.0) + } +} \ No newline at end of file diff --git a/RxTests/RxCocoaTests/NSView+RxTests.swift b/RxTests/RxCocoaTests/NSView+RxTests.swift index 21fce938..b19565ac 100644 --- a/RxTests/RxCocoaTests/NSView+RxTests.swift +++ b/RxTests/RxCocoaTests/NSView+RxTests.swift @@ -7,3 +7,42 @@ // import Foundation +import RxSwift +import RxCocoa +import Cocoa +import XCTest + +class NSViewTests : RxTest { +} + +extension NSViewTests { + func testHidden_True() { + let subject = NSView(frame: CGRect.zero) + just(true).subscribe(subject.rx_hidden).dispose() + + XCTAssertTrue(subject.hidden == true) + } + + func testHidden_False() { + let subject = NSView(frame: CGRect.zero) + just(false).subscribe(subject.rx_hidden).dispose() + + XCTAssertTrue(subject.hidden == false) + } +} + +extension NSViewTests { + func testAlpha_0() { + let subject = NSView(frame: CGRect.zero) + just(0).subscribe(subject.rx_alpha).dispose() + + XCTAssertTrue(subject.alphaValue == 0.0) + } + + func testAlpha_1() { + let subject = NSView(frame: CGRect.zero) + just(1).subscribe(subject.rx_alpha).dispose() + + XCTAssertTrue(subject.alphaValue == 1.0) + } +} \ No newline at end of file diff --git a/RxTests/RxCocoaTests/UIView+RxTests.swift b/RxTests/RxCocoaTests/UIView+RxTests.swift index 653238f8..546de9da 100644 --- a/RxTests/RxCocoaTests/UIView+RxTests.swift +++ b/RxTests/RxCocoaTests/UIView+RxTests.swift @@ -7,3 +7,43 @@ // import Foundation + +import RxSwift +import RxCocoa +import UIKit +import XCTest + +class UIViewTests : RxTest { +} + +extension UIViewTests { + func testHidden_True() { + let subject = UIView(frame: CGRect.zero) + just(true).subscribe(subject.rx_hidden).dispose() + + XCTAssertTrue(subject.hidden == true) + } + + func testEnabled_False() { + let subject = UIView(frame: CGRect.zero) + just(false).subscribe(subject.rx_hidden).dispose() + + XCTAssertTrue(subject.hidden == false) + } +} + +extension UIViewTests { + func testAlpha_0() { + let subject = UIView(frame: CGRect.zero) + just(0).subscribe(subject.rx_alpha).dispose() + + XCTAssertTrue(subject.alpha == 0.0) + } + + func testAlpha_1() { + let subject = UIView(frame: CGRect.zero) + just(1).subscribe(subject.rx_alpha).dispose() + + XCTAssertTrue(subject.alpha == 1.0) + } +} \ No newline at end of file diff --git a/RxTests/RxTests.xcodeproj/project.pbxproj b/RxTests/RxTests.xcodeproj/project.pbxproj index 86bf9e53..f505529f 100644 --- a/RxTests/RxTests.xcodeproj/project.pbxproj +++ b/RxTests/RxTests.xcodeproj/project.pbxproj @@ -44,7 +44,6 @@ C81108681AF50E2A001C13E4 /* QueueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C811084B1AF50E2A001C13E4 /* QueueTests.swift */; }; C81108691AF50E2A001C13E4 /* RxTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C811084C1AF50E2A001C13E4 /* RxTest.swift */; }; C814CEA31AF5622600E98087 /* VariableTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C814CEA21AF5622600E98087 /* VariableTest.swift */; }; - C814CEA71AF642D600E98087 /* UI+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C814CEA61AF642D600E98087 /* UI+RxTests.swift */; }; C81CC92B1B513FD400915606 /* NSObject+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81CC92A1B513FD400915606 /* NSObject+RxTests.swift */; }; C81CC92C1B513FD400915606 /* NSObject+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81CC92A1B513FD400915606 /* NSObject+RxTests.swift */; }; C836EA011B8A76A900AB941D /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C836EA001B8A76A900AB941D /* RxSwift.framework */; }; @@ -79,7 +78,6 @@ C88BB8951B07E64B0064D411 /* TestObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81108361AF50E2A001C13E4 /* TestObservable.swift */; }; C88BB8961B07E64B0064D411 /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = C811083D1AF50E2A001C13E4 /* Subscription.swift */; }; C88BB8971B07E64B0064D411 /* MySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81108341AF50E2A001C13E4 /* MySubject.swift */; }; - C88BB8981B07E64B0064D411 /* UI+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C814CEA61AF642D600E98087 /* UI+RxTests.swift */; }; C88BB8991B07E64B0064D411 /* Observable+BindingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81108441AF50E2A001C13E4 /* Observable+BindingTest.swift */; }; C88BB89A1B07E64B0064D411 /* NSNotificationCenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C811082B1AF50E2A001C13E4 /* NSNotificationCenterTests.swift */; }; C88BB89B1B07E64B0064D411 /* Observable+MultipleTest+CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81108451AF50E2A001C13E4 /* Observable+MultipleTest+CombineLatest.swift */; }; @@ -115,10 +113,15 @@ C8A468CF1B8A897D00BF917B /* RxBlocking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468CE1B8A897D00BF917B /* RxBlocking.framework */; }; C8A468D01B8A899C00BF917B /* RxBlocking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468CE1B8A897D00BF917B /* RxBlocking.framework */; }; C8A468D11B8A899C00BF917B /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468CC1B8A897800BF917B /* RxCocoa.framework */; }; - C8B5BEA11B4A6A82000D732C /* RxCocoaTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B5BEA01B4A6A82000D732C /* RxCocoaTests.swift */; }; C8B605EC1B6260A10044410E /* AnonymousObservable+Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B605EB1B6260A10044410E /* AnonymousObservable+Test.swift */; }; C8B605ED1B6260A10044410E /* AnonymousObservable+Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B605EB1B6260A10044410E /* AnonymousObservable+Test.swift */; }; C8B787FA1AF55CDE00206D02 /* Observable+ConcurrencyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B787F91AF55CDE00206D02 /* Observable+ConcurrencyTest.swift */; }; + C8BCD3F91C14B901005F1280 /* UIView+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F81C14B901005F1280 /* UIView+RxTests.swift */; }; + C8BCD3FA1C14B901005F1280 /* UIView+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3F81C14B901005F1280 /* UIView+RxTests.swift */; }; + C8BCD3FC1C14B914005F1280 /* NSView+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3FB1C14B914005F1280 /* NSView+RxTests.swift */; }; + C8BCD3FE1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3FD1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift */; }; + C8BCD3FF1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3FD1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift */; }; + C8BCD4001C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3FD1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift */; }; C8CDD7D41B52BEC40043F0C5 /* Observable+BlockingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CDD7D31B52BEC40043F0C5 /* Observable+BlockingTest.swift */; }; C8CDD7D51B52BEC40043F0C5 /* Observable+BlockingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CDD7D31B52BEC40043F0C5 /* Observable+BlockingTest.swift */; }; C8E381231B2063CC008CDC33 /* Observable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E381221B2063CC008CDC33 /* Observable+Extensions.swift */; }; @@ -140,9 +143,7 @@ C8FDC5F81B2B5B7E0065F8D9 /* ElementIndexPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FDC5F71B2B5B7E0065F8D9 /* ElementIndexPair.swift */; }; C8FDC5F91B2B5B7E0065F8D9 /* ElementIndexPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FDC5F71B2B5B7E0065F8D9 /* ElementIndexPair.swift */; }; D203C4EB1BB9C22800D02D00 /* NSNotificationCenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C811082B1AF50E2A001C13E4 /* NSNotificationCenterTests.swift */; }; - D203C4EC1BB9C22800D02D00 /* UI+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C814CEA61AF642D600E98087 /* UI+RxTests.swift */; }; D203C4EE1BB9C22800D02D00 /* KVOObservableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8633AE41B0A9FF300375D60 /* KVOObservableTests.swift */; }; - D203C4EF1BB9C22800D02D00 /* RxCocoaTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B5BEA01B4A6A82000D732C /* RxCocoaTests.swift */; }; D203C4F01BB9C22800D02D00 /* NSObject+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81CC92A1B513FD400915606 /* NSObject+RxTests.swift */; }; D203C5141BB9C54A00D02D00 /* Control+RxTests+UIKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E5D10BA1B48355200432B25 /* Control+RxTests+UIKit.swift */; }; D251ED291BB9BF90002D0E36 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468CC1B8A897800BF917B /* RxCocoa.framework */; }; @@ -227,7 +228,6 @@ C811084B1AF50E2A001C13E4 /* QueueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueueTests.swift; sourceTree = ""; }; C811084C1AF50E2A001C13E4 /* RxTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTest.swift; sourceTree = SOURCE_ROOT; }; C814CEA21AF5622600E98087 /* VariableTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VariableTest.swift; sourceTree = ""; }; - C814CEA61AF642D600E98087 /* UI+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UI+RxTests.swift"; sourceTree = ""; }; C81CC92A1B513FD400915606 /* NSObject+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSObject+RxTests.swift"; sourceTree = ""; }; C836EA001B8A76A900AB941D /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C84B8FC11B89D0D500C9CCCF /* BagTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BagTest.swift; sourceTree = ""; }; @@ -252,9 +252,11 @@ C89CDB951BCDA1F1002063D9 /* Observable+SubscriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+SubscriptionTest.swift"; sourceTree = ""; }; C8A468CC1B8A897800BF917B /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8A468CE1B8A897D00BF917B /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8B5BEA01B4A6A82000D732C /* RxCocoaTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxCocoaTests.swift; sourceTree = ""; }; C8B605EB1B6260A10044410E /* AnonymousObservable+Test.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AnonymousObservable+Test.swift"; sourceTree = ""; }; C8B787F91AF55CDE00206D02 /* Observable+ConcurrencyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+ConcurrencyTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8BCD3F81C14B901005F1280 /* UIView+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+RxTests.swift"; sourceTree = ""; }; + C8BCD3FB1C14B914005F1280 /* NSView+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSView+RxTests.swift"; sourceTree = ""; }; + C8BCD3FD1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSLayoutConstraint+RxTests.swift"; sourceTree = ""; }; C8CDD7D31B52BEC40043F0C5 /* Observable+BlockingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+BlockingTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8E381221B2063CC008CDC33 /* Observable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Extensions.swift"; sourceTree = ""; }; C8E381271B207D03008CDC33 /* PrimitiveHotObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrimitiveHotObservable.swift; sourceTree = ""; }; @@ -368,10 +370,11 @@ C8633AE41B0A9FF300375D60 /* KVOObservableTests.swift */, C811082B1AF50E2A001C13E4 /* NSNotificationCenterTests.swift */, C81CC92A1B513FD400915606 /* NSObject+RxTests.swift */, - C8B5BEA01B4A6A82000D732C /* RxCocoaTests.swift */, - C814CEA61AF642D600E98087 /* UI+RxTests.swift */, C87BB6B61C13A64000C66DF9 /* ControlPropertyTests.swift */, C87BB6BA1C13A75600C66DF9 /* ControlEventTests.swift */, + C8BCD3F81C14B901005F1280 /* UIView+RxTests.swift */, + C8BCD3FB1C14B914005F1280 /* NSView+RxTests.swift */, + C8BCD3FD1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift */, ); path = RxCocoaTests; sourceTree = SOURCE_ROOT; @@ -631,10 +634,10 @@ C811085B1AF50E2A001C13E4 /* Subscription.swift in Sources */, C80DDEDC1BCE9A03006A1832 /* Driver+Test.swift in Sources */, C81108531AF50E2A001C13E4 /* MySubject.swift in Sources */, - C814CEA71AF642D600E98087 /* UI+RxTests.swift in Sources */, C81108611AF50E2A001C13E4 /* Observable+BindingTest.swift in Sources */, C69B65001BA88FAC00A7FA73 /* ObserverTests.swift in Sources */, C85F4E431B7F70EA00A866C7 /* CompositeObserverTest.swift in Sources */, + C8BCD3F91C14B901005F1280 /* UIView+RxTests.swift in Sources */, C811084D1AF50E2A001C13E4 /* NSNotificationCenterTests.swift in Sources */, C81108621AF50E2A001C13E4 /* Observable+MultipleTest+CombineLatest.swift in Sources */, C811085E1AF50E2A001C13E4 /* ConcurrencyTest.swift in Sources */, @@ -649,6 +652,7 @@ C8F6A1411BEFE04F007DF367 /* SubjectConcurrencyTest.swift in Sources */, C80DDEE01BCEE898006A1832 /* MainThreadPrimitiveHotObservable.swift in Sources */, C87BB6BB1C13A75600C66DF9 /* ControlEventTests.swift in Sources */, + C8BCD3FE1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift in Sources */, C81108641AF50E2A001C13E4 /* Observable+MultipleTest.swift in Sources */, C811084F1AF50E2A001C13E4 /* ColdObservable.swift in Sources */, C8FDC5F81B2B5B7E0065F8D9 /* ElementIndexPair.swift in Sources */, @@ -674,7 +678,6 @@ C811085D1AF50E2A001C13E4 /* AssumptionsTest.swift in Sources */, C81108501AF50E2A001C13E4 /* TestConnectableObservable.swift in Sources */, C814CEA31AF5622600E98087 /* VariableTest.swift in Sources */, - C8B5BEA11B4A6A82000D732C /* RxCocoaTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -700,7 +703,6 @@ C868D0FA1BB76A29003D1474 /* PerformanceTools.swift in Sources */, C88BB8971B07E64B0064D411 /* MySubject.swift in Sources */, C87BB6BC1C13A75600C66DF9 /* ControlEventTests.swift in Sources */, - C88BB8981B07E64B0064D411 /* UI+RxTests.swift in Sources */, C88BB8991B07E64B0064D411 /* Observable+BindingTest.swift in Sources */, C88BB89A1B07E64B0064D411 /* NSNotificationCenterTests.swift in Sources */, C88BB89B1B07E64B0064D411 /* Observable+MultipleTest+CombineLatest.swift in Sources */, @@ -723,10 +725,12 @@ C89CDB971BCDA1F1002063D9 /* Observable+SubscriptionTest.swift in Sources */, C88BB8A31B07E64B0064D411 /* HotObservable.swift in Sources */, C8FDC5F91B2B5B7E0065F8D9 /* ElementIndexPair.swift in Sources */, + C8BCD3FF1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift in Sources */, C88BB8A41B07E64B0064D411 /* Observable.Extensions.swift in Sources */, C868D0F71BB75EAE003D1474 /* RxTest.swift in Sources */, C84B8FC31B89D0D500C9CCCF /* BagTest.swift in Sources */, C87BB6B81C13A64000C66DF9 /* ControlPropertyTests.swift in Sources */, + C8BCD3FC1C14B914005F1280 /* NSView+RxTests.swift in Sources */, C897EC3C1B10E000009C2CB0 /* BehaviorSubjectTest.swift in Sources */, C88BB8A51B07E64B0064D411 /* QueueTests.swift in Sources */, C8E3812C1B2083C2008CDC33 /* PrimitiveMockObserver.swift in Sources */, @@ -762,7 +766,6 @@ C89CDB981BCDA1F1002063D9 /* Observable+SubscriptionTest.swift in Sources */, C87BB6B91C13A64000C66DF9 /* ControlPropertyTests.swift in Sources */, D2EBEB6F1BB9B7EF003A27DC /* Observable+CreationTest.swift in Sources */, - D203C4EC1BB9C22800D02D00 /* UI+RxTests.swift in Sources */, D2EBEB591BB9B7CC003A27DC /* TestObserver.swift in Sources */, D2EBEB5E1BB9B7D8003A27DC /* VirtualTimeSchedulerBase.swift in Sources */, C80DDEDE1BCE9A03006A1832 /* Driver+Test.swift in Sources */, @@ -771,6 +774,7 @@ D2EBEB791BB9B7FD003A27DC /* RxTest.swift in Sources */, D2EBEB6E1BB9B7EF003A27DC /* Observable+ConcurrencyTest.swift in Sources */, D2EBEB541BB9B7CC003A27DC /* HotObservable.swift in Sources */, + C8BCD3FA1C14B901005F1280 /* UIView+RxTests.swift in Sources */, D2EBEB5D1BB9B7D6003A27DC /* TestScheduler.swift in Sources */, D2EBEB6B1BB9B7EF003A27DC /* Observable+AggregateTest.swift in Sources */, D2EBEB751BB9B7F9003A27DC /* Observable+TimeTest.swift in Sources */, @@ -785,6 +789,7 @@ D2EBEB731BB9B7F9003A27DC /* Observable+SingleTest.swift in Sources */, C8F6A1431BEFE04F007DF367 /* SubjectConcurrencyTest.swift in Sources */, C87BB6BD1C13A75600C66DF9 /* ControlEventTests.swift in Sources */, + C8BCD4001C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift in Sources */, C80DDEE21BCEE898006A1832 /* MainThreadPrimitiveHotObservable.swift in Sources */, D2EBEB6C1BB9B7EF003A27DC /* Observable+BindingTest.swift in Sources */, D2EBEB621BB9B7E5003A27DC /* ElementIndexPair.swift in Sources */, @@ -801,7 +806,6 @@ D2AF919A1BD3D9C700A008C1 /* MockDisposable.swift in Sources */, D2EBEB761BB9B7F9003A27DC /* QueueTests.swift in Sources */, D2EBEB711BB9B7EF003A27DC /* Observable+MultipleTest+CombineLatest.swift in Sources */, - D203C4EF1BB9C22800D02D00 /* RxCocoaTests.swift in Sources */, D2EBEB5C1BB9B7D0003A27DC /* Recorded.swift in Sources */, D2EBEB611BB9B7E2003A27DC /* Observable+Extensions.swift in Sources */, D203C4EE1BB9C22800D02D00 /* KVOObservableTests.swift in Sources */,