├── .github └── workflows │ └── swift.yml ├── .gitignore ├── CONTRIBUTING.md ├── Documentation └── Images │ └── add-package-dependency.png ├── Example ├── Documentation │ └── Images │ │ ├── CounterView.png │ │ └── TasksView.png ├── Example.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── README.md └── Sources │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Counter.swift │ ├── CounterViewController.swift │ ├── Info.plist │ ├── SceneDelegate.swift │ ├── TabBarController.swift │ ├── TaskList.swift │ └── TasksViewController.swift ├── LICENSE ├── Package.swift ├── README.md ├── Sources ├── Bindings │ ├── BindingOwner.swift │ ├── BindingSink.swift │ ├── BindingSubscriber.swift │ ├── Box.swift │ ├── README.md │ └── ReactiveExtensionProvider.swift ├── CombineViewModel │ ├── ClassHierarchy.swift │ ├── CombineExports.swift │ ├── DispatchQueue+EventSourceScheduler.swift │ ├── EventSource.swift │ ├── EventSourceScheduler.swift │ ├── MethodList.swift │ ├── ObjCRuntime.swift │ ├── ObjectDidChangePublisher.swift │ ├── RunLoop+EventSourceScheduler.swift │ ├── UIViewController+ViewDidLoadPublisher.swift │ ├── UnfairAtomic.swift │ ├── ViewModel.swift │ ├── ViewModelObserver.swift │ └── Weak.swift └── UIKitBindings │ ├── UIApplication.swift │ ├── UIBarButtonItem.swift │ ├── UIControl.swift │ ├── UILabel.swift │ ├── UIRefreshControl.swift │ ├── UISwitch.swift │ ├── UITextField.swift │ ├── UIView.swift │ └── UIViewController.swift └── Tests ├── CombineViewModelTests ├── DispatchQueueEventSourceSchedulerTests.swift ├── HookedViewDidLoadTests.swift ├── ObjectDidChangePublisherTests.swift └── ViewModelTests.swift └── ObjCTestSupport ├── TestObjCViewController.m └── include └── ObjCTestSupport.h /.github/workflows/swift.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/.github/workflows/swift.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/.gitignore -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/CONTRIBUTING.md -------------------------------------------------------------------------------- /Documentation/Images/add-package-dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Documentation/Images/add-package-dependency.png -------------------------------------------------------------------------------- /Example/Documentation/Images/CounterView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Documentation/Images/CounterView.png -------------------------------------------------------------------------------- /Example/Documentation/Images/TasksView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Documentation/Images/TasksView.png -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Example.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /Example/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/README.md -------------------------------------------------------------------------------- /Example/Sources/AppDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/AppDelegate.swift -------------------------------------------------------------------------------- /Example/Sources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Assets.xcassets/AccentColor.colorset/Contents.json -------------------------------------------------------------------------------- /Example/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json -------------------------------------------------------------------------------- /Example/Sources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Assets.xcassets/Contents.json -------------------------------------------------------------------------------- /Example/Sources/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Base.lproj/LaunchScreen.storyboard -------------------------------------------------------------------------------- /Example/Sources/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Base.lproj/Main.storyboard -------------------------------------------------------------------------------- /Example/Sources/Counter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Counter.swift -------------------------------------------------------------------------------- /Example/Sources/CounterViewController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/CounterViewController.swift -------------------------------------------------------------------------------- /Example/Sources/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/Info.plist -------------------------------------------------------------------------------- /Example/Sources/SceneDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/SceneDelegate.swift -------------------------------------------------------------------------------- /Example/Sources/TabBarController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/TabBarController.swift -------------------------------------------------------------------------------- /Example/Sources/TaskList.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/TaskList.swift -------------------------------------------------------------------------------- /Example/Sources/TasksViewController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Example/Sources/TasksViewController.swift -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/LICENSE -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Package.swift -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/README.md -------------------------------------------------------------------------------- /Sources/Bindings/BindingOwner.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/Bindings/BindingOwner.swift -------------------------------------------------------------------------------- /Sources/Bindings/BindingSink.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/Bindings/BindingSink.swift -------------------------------------------------------------------------------- /Sources/Bindings/BindingSubscriber.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/Bindings/BindingSubscriber.swift -------------------------------------------------------------------------------- /Sources/Bindings/Box.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/Bindings/Box.swift -------------------------------------------------------------------------------- /Sources/Bindings/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/Bindings/README.md -------------------------------------------------------------------------------- /Sources/Bindings/ReactiveExtensionProvider.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/Bindings/ReactiveExtensionProvider.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/ClassHierarchy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/ClassHierarchy.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/CombineExports.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/CombineExports.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/DispatchQueue+EventSourceScheduler.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/DispatchQueue+EventSourceScheduler.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/EventSource.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/EventSource.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/EventSourceScheduler.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/EventSourceScheduler.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/MethodList.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/MethodList.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/ObjCRuntime.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/ObjCRuntime.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/ObjectDidChangePublisher.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/ObjectDidChangePublisher.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/RunLoop+EventSourceScheduler.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/RunLoop+EventSourceScheduler.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/UIViewController+ViewDidLoadPublisher.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/UIViewController+ViewDidLoadPublisher.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/UnfairAtomic.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/UnfairAtomic.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/ViewModel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/ViewModel.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/ViewModelObserver.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/ViewModelObserver.swift -------------------------------------------------------------------------------- /Sources/CombineViewModel/Weak.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/CombineViewModel/Weak.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UIApplication.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UIApplication.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UIBarButtonItem.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UIBarButtonItem.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UIControl.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UIControl.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UILabel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UILabel.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UIRefreshControl.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UIRefreshControl.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UISwitch.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UISwitch.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UITextField.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UITextField.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UIView.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UIView.swift -------------------------------------------------------------------------------- /Sources/UIKitBindings/UIViewController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Sources/UIKitBindings/UIViewController.swift -------------------------------------------------------------------------------- /Tests/CombineViewModelTests/DispatchQueueEventSourceSchedulerTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Tests/CombineViewModelTests/DispatchQueueEventSourceSchedulerTests.swift -------------------------------------------------------------------------------- /Tests/CombineViewModelTests/HookedViewDidLoadTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Tests/CombineViewModelTests/HookedViewDidLoadTests.swift -------------------------------------------------------------------------------- /Tests/CombineViewModelTests/ObjectDidChangePublisherTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Tests/CombineViewModelTests/ObjectDidChangePublisherTests.swift -------------------------------------------------------------------------------- /Tests/CombineViewModelTests/ViewModelTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Tests/CombineViewModelTests/ViewModelTests.swift -------------------------------------------------------------------------------- /Tests/ObjCTestSupport/TestObjCViewController.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Tests/ObjCTestSupport/TestObjCViewController.m -------------------------------------------------------------------------------- /Tests/ObjCTestSupport/include/ObjCTestSupport.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoughtbot/CombineViewModel/HEAD/Tests/ObjCTestSupport/include/ObjCTestSupport.h --------------------------------------------------------------------------------