├── .gitignore ├── .swift-version ├── .travis.yml ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Alamofire │ │ ├── LICENSE │ │ ├── README.md │ │ └── Source │ │ │ ├── AFError.swift │ │ │ ├── Alamofire.swift │ │ │ ├── DispatchQueue+Alamofire.swift │ │ │ ├── MultipartFormData.swift │ │ │ ├── NetworkReachabilityManager.swift │ │ │ ├── Notifications.swift │ │ │ ├── ParameterEncoding.swift │ │ │ ├── Request.swift │ │ │ ├── Response.swift │ │ │ ├── ResponseSerialization.swift │ │ │ ├── Result.swift │ │ │ ├── ServerTrustPolicy.swift │ │ │ ├── SessionDelegate.swift │ │ │ ├── SessionManager.swift │ │ │ ├── TaskDelegate.swift │ │ │ ├── Timeline.swift │ │ │ └── Validation.swift │ ├── Kingfisher │ │ ├── LICENSE │ │ ├── README.md │ │ └── Sources │ │ │ ├── AnimatedImageView.swift │ │ │ ├── Box.swift │ │ │ ├── CacheSerializer.swift │ │ │ ├── Filter.swift │ │ │ ├── FormatIndicatedCacheSerializer.swift │ │ │ ├── Image.swift │ │ │ ├── ImageCache.swift │ │ │ ├── ImageDownloader.swift │ │ │ ├── ImagePrefetcher.swift │ │ │ ├── ImageProcessor.swift │ │ │ ├── ImageTransition.swift │ │ │ ├── ImageView+Kingfisher.swift │ │ │ ├── Indicator.swift │ │ │ ├── Kingfisher.h │ │ │ ├── Kingfisher.swift │ │ │ ├── KingfisherManager.swift │ │ │ ├── KingfisherOptionsInfo.swift │ │ │ ├── Placeholder.swift │ │ │ ├── RequestModifier.swift │ │ │ ├── Resource.swift │ │ │ ├── String+MD5.swift │ │ │ ├── ThreadHelper.swift │ │ │ └── UIButton+Kingfisher.swift │ ├── Local Podspecs │ │ └── iOSEasyList.podspec.json │ ├── Manifest.lock │ ├── Moya │ │ ├── License.md │ │ ├── Readme.md │ │ └── Sources │ │ │ └── Moya │ │ │ ├── AnyEncodable.swift │ │ │ ├── Cancellable.swift │ │ │ ├── Endpoint.swift │ │ │ ├── Image.swift │ │ │ ├── Moya+Alamofire.swift │ │ │ ├── MoyaError.swift │ │ │ ├── MoyaProvider+Defaults.swift │ │ │ ├── MoyaProvider+Internal.swift │ │ │ ├── MoyaProvider.swift │ │ │ ├── MultiTarget.swift │ │ │ ├── MultipartFormData.swift │ │ │ ├── Plugin.swift │ │ │ ├── Plugins │ │ │ ├── AccessTokenPlugin.swift │ │ │ ├── CredentialsPlugin.swift │ │ │ ├── NetworkActivityPlugin.swift │ │ │ └── NetworkLoggerPlugin.swift │ │ │ ├── Response.swift │ │ │ ├── TargetType.swift │ │ │ ├── Task.swift │ │ │ ├── URL+Moya.swift │ │ │ └── URLRequest+Encoding.swift │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── Result │ │ ├── LICENSE │ │ ├── README.md │ │ └── Result │ │ │ ├── Result.swift │ │ │ └── ResultProtocol.swift │ ├── RxCocoa │ │ ├── LICENSE.md │ │ ├── Platform │ │ │ ├── DataStructures │ │ │ │ ├── Bag.swift │ │ │ │ ├── InfiniteSequence.swift │ │ │ │ ├── PriorityQueue.swift │ │ │ │ └── Queue.swift │ │ │ ├── DispatchQueue+Extensions.swift │ │ │ ├── Platform.Darwin.swift │ │ │ ├── Platform.Linux.swift │ │ │ └── RecursiveLock.swift │ │ ├── README.md │ │ └── RxCocoa │ │ │ ├── Common │ │ │ ├── Binder.swift │ │ │ ├── ControlTarget.swift │ │ │ ├── DelegateProxy.swift │ │ │ ├── DelegateProxyType.swift │ │ │ ├── NSLayoutConstraint+Rx.swift │ │ │ ├── Observable+Bind.swift │ │ │ ├── RxCocoaObjCRuntimeError+Extensions.swift │ │ │ ├── RxTarget.swift │ │ │ ├── SectionedViewDataSourceType.swift │ │ │ └── TextInput.swift │ │ │ ├── Deprecated.swift │ │ │ ├── Foundation │ │ │ ├── KVORepresentable+CoreGraphics.swift │ │ │ ├── KVORepresentable+Swift.swift │ │ │ ├── KVORepresentable.swift │ │ │ ├── Logging.swift │ │ │ ├── NSObject+Rx+KVORepresentable.swift │ │ │ ├── NSObject+Rx+RawRepresentable.swift │ │ │ ├── NSObject+Rx.swift │ │ │ ├── NotificationCenter+Rx.swift │ │ │ └── URLSession+Rx.swift │ │ │ ├── Runtime │ │ │ ├── _RX.m │ │ │ ├── _RXDelegateProxy.m │ │ │ ├── _RXKVOObserver.m │ │ │ ├── _RXObjCRuntime.m │ │ │ └── include │ │ │ │ ├── RxCocoaRuntime.h │ │ │ │ ├── _RX.h │ │ │ │ ├── _RXDelegateProxy.h │ │ │ │ ├── _RXKVOObserver.h │ │ │ │ └── _RXObjCRuntime.h │ │ │ ├── RxCocoa.h │ │ │ ├── RxCocoa.swift │ │ │ ├── Traits │ │ │ ├── BehaviorRelay.swift │ │ │ ├── ControlEvent.swift │ │ │ ├── ControlProperty.swift │ │ │ ├── Driver │ │ │ │ ├── BehaviorRelay+Driver.swift │ │ │ │ ├── ControlEvent+Driver.swift │ │ │ │ ├── ControlProperty+Driver.swift │ │ │ │ ├── Driver+Subscription.swift │ │ │ │ ├── Driver.swift │ │ │ │ └── ObservableConvertibleType+Driver.swift │ │ │ ├── PublishRelay.swift │ │ │ ├── SharedSequence │ │ │ │ ├── SchedulerType+SharedSequence.swift │ │ │ │ ├── SharedSequence+Operators+arity.swift │ │ │ │ ├── SharedSequence+Operators.swift │ │ │ │ └── SharedSequence.swift │ │ │ └── Signal │ │ │ │ ├── ObservableConvertibleType+Signal.swift │ │ │ │ ├── PublishRelay+Signal.swift │ │ │ │ ├── Signal+Subscription.swift │ │ │ │ └── Signal.swift │ │ │ └── iOS │ │ │ ├── DataSources │ │ │ ├── RxCollectionViewReactiveArrayDataSource.swift │ │ │ ├── RxPickerViewAdapter.swift │ │ │ └── RxTableViewReactiveArrayDataSource.swift │ │ │ ├── Events │ │ │ └── ItemEvents.swift │ │ │ ├── NSTextStorage+Rx.swift │ │ │ ├── Protocols │ │ │ ├── RxCollectionViewDataSourceType.swift │ │ │ ├── RxPickerViewDataSourceType.swift │ │ │ └── RxTableViewDataSourceType.swift │ │ │ ├── Proxies │ │ │ ├── RxCollectionViewDataSourceProxy.swift │ │ │ ├── RxCollectionViewDelegateProxy.swift │ │ │ ├── RxNavigationControllerDelegateProxy.swift │ │ │ ├── RxPickerViewDataSourceProxy.swift │ │ │ ├── RxPickerViewDelegateProxy.swift │ │ │ ├── RxScrollViewDelegateProxy.swift │ │ │ ├── RxSearchBarDelegateProxy.swift │ │ │ ├── RxSearchControllerDelegateProxy.swift │ │ │ ├── RxTabBarControllerDelegateProxy.swift │ │ │ ├── RxTabBarDelegateProxy.swift │ │ │ ├── RxTableViewDataSourceProxy.swift │ │ │ ├── RxTableViewDelegateProxy.swift │ │ │ ├── RxTextStorageDelegateProxy.swift │ │ │ ├── RxTextViewDelegateProxy.swift │ │ │ └── RxWebViewDelegateProxy.swift │ │ │ ├── UIActivityIndicatorView+Rx.swift │ │ │ ├── UIAlertAction+Rx.swift │ │ │ ├── UIApplication+Rx.swift │ │ │ ├── UIBarButtonItem+Rx.swift │ │ │ ├── UIButton+Rx.swift │ │ │ ├── UICollectionView+Rx.swift │ │ │ ├── UIControl+Rx.swift │ │ │ ├── UIDatePicker+Rx.swift │ │ │ ├── UIGestureRecognizer+Rx.swift │ │ │ ├── UIImageView+Rx.swift │ │ │ ├── UILabel+Rx.swift │ │ │ ├── UINavigationController+Rx.swift │ │ │ ├── UINavigationItem+Rx.swift │ │ │ ├── UIPageControl+Rx.swift │ │ │ ├── UIPickerView+Rx.swift │ │ │ ├── UIProgressView+Rx.swift │ │ │ ├── UIRefreshControl+Rx.swift │ │ │ ├── UIScrollView+Rx.swift │ │ │ ├── UISearchBar+Rx.swift │ │ │ ├── UISearchController+Rx.swift │ │ │ ├── UISegmentedControl+Rx.swift │ │ │ ├── UISlider+Rx.swift │ │ │ ├── UIStepper+Rx.swift │ │ │ ├── UISwitch+Rx.swift │ │ │ ├── UITabBar+Rx.swift │ │ │ ├── UITabBarController+Rx.swift │ │ │ ├── UITabBarItem+Rx.swift │ │ │ ├── UITableView+Rx.swift │ │ │ ├── UITextField+Rx.swift │ │ │ ├── UITextView+Rx.swift │ │ │ ├── UIView+Rx.swift │ │ │ ├── UIViewController+Rx.swift │ │ │ └── UIWebView+Rx.swift │ ├── RxGesture │ │ ├── LICENSE │ │ ├── Pod │ │ │ └── Classes │ │ │ │ ├── GestureFactory.swift │ │ │ │ ├── RxGestureRecognizerDelegate.swift │ │ │ │ ├── SharedTypes.swift │ │ │ │ ├── View+RxGesture.swift │ │ │ │ └── iOS │ │ │ │ ├── TransformGestureRecognizers.swift │ │ │ │ ├── UIGestureRecognizer+RxGesture.swift │ │ │ │ ├── UILongPressGestureRecognizer+RxGesture.swift │ │ │ │ ├── UIPanGestureRecognizer+RxGesture.swift │ │ │ │ ├── UIPinchGestureRecognizer+RxGesture.swift │ │ │ │ ├── UIRotationGestureRecognizer+RxGesture.swift │ │ │ │ ├── UIScreenEdgePanGestureRecognizer+RxGesture.swift │ │ │ │ ├── UISwipeGestureRecognizer+RxGesture.swift │ │ │ │ └── UITapGestureRecognizer+RxGesture.swift │ │ └── README.md │ ├── RxKeyboard │ │ ├── LICENSE │ │ ├── README.md │ │ └── Sources │ │ │ └── RxKeyboard │ │ │ └── RxKeyboard.swift │ ├── RxSwift │ │ ├── LICENSE.md │ │ ├── Platform │ │ │ ├── DataStructures │ │ │ │ ├── Bag.swift │ │ │ │ ├── InfiniteSequence.swift │ │ │ │ ├── PriorityQueue.swift │ │ │ │ └── Queue.swift │ │ │ ├── DispatchQueue+Extensions.swift │ │ │ ├── Platform.Darwin.swift │ │ │ ├── Platform.Linux.swift │ │ │ └── RecursiveLock.swift │ │ ├── README.md │ │ └── RxSwift │ │ │ ├── AnyObserver.swift │ │ │ ├── Cancelable.swift │ │ │ ├── Concurrency │ │ │ ├── AsyncLock.swift │ │ │ ├── Lock.swift │ │ │ ├── LockOwnerType.swift │ │ │ ├── SynchronizedDisposeType.swift │ │ │ ├── SynchronizedOnType.swift │ │ │ └── SynchronizedUnsubscribeType.swift │ │ │ ├── ConnectableObservableType.swift │ │ │ ├── Deprecated.swift │ │ │ ├── Disposable.swift │ │ │ ├── Disposables │ │ │ ├── AnonymousDisposable.swift │ │ │ ├── BinaryDisposable.swift │ │ │ ├── BooleanDisposable.swift │ │ │ ├── CompositeDisposable.swift │ │ │ ├── Disposables.swift │ │ │ ├── DisposeBag.swift │ │ │ ├── DisposeBase.swift │ │ │ ├── NopDisposable.swift │ │ │ ├── RefCountDisposable.swift │ │ │ ├── ScheduledDisposable.swift │ │ │ ├── SerialDisposable.swift │ │ │ ├── SingleAssignmentDisposable.swift │ │ │ └── SubscriptionDisposable.swift │ │ │ ├── Errors.swift │ │ │ ├── Event.swift │ │ │ ├── Extensions │ │ │ ├── Bag+Rx.swift │ │ │ └── String+Rx.swift │ │ │ ├── GroupedObservable.swift │ │ │ ├── ImmediateSchedulerType.swift │ │ │ ├── Observable.swift │ │ │ ├── ObservableConvertibleType.swift │ │ │ ├── ObservableType+Extensions.swift │ │ │ ├── ObservableType.swift │ │ │ ├── Observables │ │ │ ├── AddRef.swift │ │ │ ├── Amb.swift │ │ │ ├── AsMaybe.swift │ │ │ ├── AsSingle.swift │ │ │ ├── Buffer.swift │ │ │ ├── Catch.swift │ │ │ ├── CombineLatest+Collection.swift │ │ │ ├── CombineLatest+arity.swift │ │ │ ├── CombineLatest.swift │ │ │ ├── Concat.swift │ │ │ ├── Create.swift │ │ │ ├── Debounce.swift │ │ │ ├── Debug.swift │ │ │ ├── DefaultIfEmpty.swift │ │ │ ├── Deferred.swift │ │ │ ├── Delay.swift │ │ │ ├── DelaySubscription.swift │ │ │ ├── Dematerialize.swift │ │ │ ├── DistinctUntilChanged.swift │ │ │ ├── Do.swift │ │ │ ├── ElementAt.swift │ │ │ ├── Empty.swift │ │ │ ├── Enumerated.swift │ │ │ ├── Error.swift │ │ │ ├── Filter.swift │ │ │ ├── First.swift │ │ │ ├── Generate.swift │ │ │ ├── GroupBy.swift │ │ │ ├── Just.swift │ │ │ ├── Map.swift │ │ │ ├── Materialize.swift │ │ │ ├── Merge.swift │ │ │ ├── Multicast.swift │ │ │ ├── Never.swift │ │ │ ├── ObserveOn.swift │ │ │ ├── Optional.swift │ │ │ ├── Producer.swift │ │ │ ├── Range.swift │ │ │ ├── Reduce.swift │ │ │ ├── Repeat.swift │ │ │ ├── RetryWhen.swift │ │ │ ├── Sample.swift │ │ │ ├── Scan.swift │ │ │ ├── Sequence.swift │ │ │ ├── ShareReplayScope.swift │ │ │ ├── SingleAsync.swift │ │ │ ├── Sink.swift │ │ │ ├── Skip.swift │ │ │ ├── SkipUntil.swift │ │ │ ├── SkipWhile.swift │ │ │ ├── StartWith.swift │ │ │ ├── SubscribeOn.swift │ │ │ ├── Switch.swift │ │ │ ├── SwitchIfEmpty.swift │ │ │ ├── Take.swift │ │ │ ├── TakeLast.swift │ │ │ ├── TakeUntil.swift │ │ │ ├── TakeWhile.swift │ │ │ ├── Throttle.swift │ │ │ ├── Timeout.swift │ │ │ ├── Timer.swift │ │ │ ├── ToArray.swift │ │ │ ├── Using.swift │ │ │ ├── Window.swift │ │ │ ├── WithLatestFrom.swift │ │ │ ├── Zip+Collection.swift │ │ │ ├── Zip+arity.swift │ │ │ └── Zip.swift │ │ │ ├── ObserverType.swift │ │ │ ├── Observers │ │ │ ├── AnonymousObserver.swift │ │ │ ├── ObserverBase.swift │ │ │ └── TailRecursiveSink.swift │ │ │ ├── Reactive.swift │ │ │ ├── Rx.swift │ │ │ ├── RxMutableBox.swift │ │ │ ├── SchedulerType.swift │ │ │ ├── Schedulers │ │ │ ├── ConcurrentDispatchQueueScheduler.swift │ │ │ ├── ConcurrentMainScheduler.swift │ │ │ ├── CurrentThreadScheduler.swift │ │ │ ├── HistoricalScheduler.swift │ │ │ ├── HistoricalSchedulerTimeConverter.swift │ │ │ ├── Internal │ │ │ │ ├── DispatchQueueConfiguration.swift │ │ │ │ ├── InvocableScheduledItem.swift │ │ │ │ ├── InvocableType.swift │ │ │ │ ├── ScheduledItem.swift │ │ │ │ └── ScheduledItemType.swift │ │ │ ├── MainScheduler.swift │ │ │ ├── OperationQueueScheduler.swift │ │ │ ├── RecursiveScheduler.swift │ │ │ ├── SchedulerServices+Emulation.swift │ │ │ ├── SerialDispatchQueueScheduler.swift │ │ │ ├── VirtualTimeConverterType.swift │ │ │ └── VirtualTimeScheduler.swift │ │ │ ├── Subjects │ │ │ ├── AsyncSubject.swift │ │ │ ├── BehaviorSubject.swift │ │ │ ├── PublishSubject.swift │ │ │ ├── ReplaySubject.swift │ │ │ └── SubjectType.swift │ │ │ ├── SwiftSupport │ │ │ └── SwiftSupport.swift │ │ │ └── Traits │ │ │ ├── Completable+AndThen.swift │ │ │ ├── Completable.swift │ │ │ ├── Maybe.swift │ │ │ ├── ObservableType+PrimitiveSequence.swift │ │ │ ├── PrimitiveSequence+Zip+arity.swift │ │ │ ├── PrimitiveSequence.swift │ │ │ └── Single.swift │ └── Target Support Files │ │ ├── Alamofire │ │ ├── Alamofire-dummy.m │ │ ├── Alamofire-prefix.pch │ │ ├── Alamofire-umbrella.h │ │ ├── Alamofire.modulemap │ │ ├── Alamofire.xcconfig │ │ └── Info.plist │ │ ├── Kingfisher │ │ ├── Info.plist │ │ ├── Kingfisher-dummy.m │ │ ├── Kingfisher-prefix.pch │ │ ├── Kingfisher-umbrella.h │ │ ├── Kingfisher.modulemap │ │ └── Kingfisher.xcconfig │ │ ├── Moya │ │ ├── Info.plist │ │ ├── Moya-dummy.m │ │ ├── Moya-prefix.pch │ │ ├── Moya-umbrella.h │ │ ├── Moya.modulemap │ │ └── Moya.xcconfig │ │ ├── Pods-iOSEasyList_Example │ │ ├── Info.plist │ │ ├── Pods-iOSEasyList_Example-acknowledgements.markdown │ │ ├── Pods-iOSEasyList_Example-acknowledgements.plist │ │ ├── Pods-iOSEasyList_Example-dummy.m │ │ ├── Pods-iOSEasyList_Example-frameworks.sh │ │ ├── Pods-iOSEasyList_Example-resources.sh │ │ ├── Pods-iOSEasyList_Example-umbrella.h │ │ ├── Pods-iOSEasyList_Example.debug.xcconfig │ │ ├── Pods-iOSEasyList_Example.modulemap │ │ └── Pods-iOSEasyList_Example.release.xcconfig │ │ ├── Pods-iOSEasyList_Tests │ │ ├── Info.plist │ │ ├── Pods-iOSEasyList_Tests-acknowledgements.markdown │ │ ├── Pods-iOSEasyList_Tests-acknowledgements.plist │ │ ├── Pods-iOSEasyList_Tests-dummy.m │ │ ├── Pods-iOSEasyList_Tests-frameworks.sh │ │ ├── Pods-iOSEasyList_Tests-resources.sh │ │ ├── Pods-iOSEasyList_Tests-umbrella.h │ │ ├── Pods-iOSEasyList_Tests.debug.xcconfig │ │ ├── Pods-iOSEasyList_Tests.modulemap │ │ └── Pods-iOSEasyList_Tests.release.xcconfig │ │ ├── Result │ │ ├── Info.plist │ │ ├── Result-dummy.m │ │ ├── Result-prefix.pch │ │ ├── Result-umbrella.h │ │ ├── Result.modulemap │ │ └── Result.xcconfig │ │ ├── RxCocoa │ │ ├── Info.plist │ │ ├── RxCocoa-dummy.m │ │ ├── RxCocoa-prefix.pch │ │ ├── RxCocoa-umbrella.h │ │ ├── RxCocoa.modulemap │ │ └── RxCocoa.xcconfig │ │ ├── RxGesture │ │ ├── Info.plist │ │ ├── RxGesture-dummy.m │ │ ├── RxGesture-prefix.pch │ │ ├── RxGesture-umbrella.h │ │ ├── RxGesture.modulemap │ │ └── RxGesture.xcconfig │ │ ├── RxKeyboard │ │ ├── Info.plist │ │ ├── RxKeyboard-dummy.m │ │ ├── RxKeyboard-prefix.pch │ │ ├── RxKeyboard-umbrella.h │ │ ├── RxKeyboard.modulemap │ │ └── RxKeyboard.xcconfig │ │ ├── RxSwift │ │ ├── Info.plist │ │ ├── RxSwift-dummy.m │ │ ├── RxSwift-prefix.pch │ │ ├── RxSwift-umbrella.h │ │ ├── RxSwift.modulemap │ │ └── RxSwift.xcconfig │ │ └── iOSEasyList │ │ ├── Info.plist │ │ ├── iOSEasyList-dummy.m │ │ ├── iOSEasyList-prefix.pch │ │ ├── iOSEasyList-umbrella.h │ │ ├── iOSEasyList.modulemap │ │ └── iOSEasyList.xcconfig ├── Tests │ ├── Info.plist │ └── Tests.swift ├── iOSEasyList.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── iOSEasyList-Example.xcscheme ├── iOSEasyList.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── iOSEasyList │ ├── AppDelegate.swift │ ├── Base.lproj │ └── LaunchScreen.xib │ ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── collapse.imageset │ │ ├── Contents.json │ │ └── collapse.pdf │ ├── expand.imageset │ │ ├── Contents.json │ │ └── expand.pdf │ └── refresh.imageset │ │ ├── Contents.json │ │ └── refresh.pdf │ ├── Info.plist │ ├── api │ ├── API.swift │ └── MovieApi.swift │ ├── model │ ├── Message.swift │ └── Movie.swift │ ├── modules │ ├── animation │ │ ├── AnimationAdapter.swift │ │ ├── AnimationVC.swift │ │ ├── AnimationVC.xib │ │ └── AnimationVM.swift │ ├── endless │ │ ├── EndlessAdapter.swift │ │ ├── EndlessVC.swift │ │ ├── EndlessVC.xib │ │ ├── EndlessVM.swift │ │ ├── HeroCell.swift │ │ ├── HeroCell.xib │ │ ├── PopularCell.swift │ │ ├── PopularCell.xib │ │ ├── PopularMovieCell.swift │ │ └── PopularMovieCell.xib │ ├── expandable │ │ ├── CollapsibleTableViewHeader.swift │ │ ├── CollapsibleTableViewHeader.xib │ │ ├── ExpandableAdapter.swift │ │ ├── ExpandableVC.swift │ │ ├── ExpandableVC.xib │ │ └── ExpandableVM.swift │ ├── filtering │ │ ├── FilteringAdapter.swift │ │ ├── FilteringVC.swift │ │ ├── FilteringVC.xib │ │ └── FilteringVM.swift │ ├── layout │ │ ├── FlowCell.swift │ │ ├── FlowCell.xib │ │ ├── GridCell.swift │ │ ├── GridCell.xib │ │ ├── LayoutAdapter.swift │ │ ├── LayoutVC.swift │ │ ├── LayoutVC.xib │ │ ├── LayoutVM.swift │ │ ├── ListCell.swift │ │ ├── ListCell.xib │ │ ├── StaggeredCell.swift │ │ └── StaggeredCell.xib │ ├── main │ │ ├── Base.lproj │ │ │ └── Main.storyboard │ │ └── MainVC.swift │ ├── messaging │ │ ├── MessageBar.swift │ │ ├── MessageReceiveCell.swift │ │ ├── MessageReceiveCell.xib │ │ ├── MessageSendCell.swift │ │ ├── MessageSendCell.xib │ │ ├── MessagingVC.swift │ │ ├── MessagingVC.xib │ │ └── MessagingVM.swift │ ├── sectioned │ │ ├── SectionFooter.swift │ │ ├── SectionFooter.xib │ │ ├── SectionedAdapter.swift │ │ ├── SectionedVC.swift │ │ ├── SectionedVC.xib │ │ └── SectionedVM.swift │ └── shared │ │ ├── AppHelpers.swift │ │ ├── BaseTextView.swift │ │ ├── EmptyView.swift │ │ ├── EmptyView.xib │ │ ├── ErrorView.swift │ │ ├── ErrorView.xib │ │ ├── LoadingView.swift │ │ ├── LoadingView.xib │ │ ├── MovieCell.swift │ │ ├── MovieCell.xib │ │ ├── ProgressFooter.swift │ │ ├── ProgressFooter.xib │ │ ├── RetryFooter.swift │ │ └── RetryFooter.xib │ └── sarah.jpeg ├── LICENSE ├── README.md ├── _Pods.xcodeproj ├── iOSEasyList.podspec ├── iOSEasyList ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── BaseCell.swift │ ├── Collapsible.swift │ ├── CollectionViewAdapter.swift │ ├── Diffable.swift │ ├── Filterable.swift │ ├── ListAdapter.swift │ ├── ListHelper.swift │ ├── ListUpdater.swift │ ├── PaginatedListScrollListener.swift │ ├── TableViewAdapter.swift │ ├── UICollectionViewFullWidthFlowLayout.swift │ ├── UICollectionViewJustifiedFlowLayout.swift │ ├── UICollectionViewSnappingFlowLayout.swift │ ├── UICollectionViewStaggeredLayout.swift │ └── UITableView+LoadingFooter.swift └── screenshots ├── animation-ios.gif ├── expandable_ios.gif ├── filtering-ios.gif ├── layout-ios.gif ├── message-ios.gif ├── pagination-ios.gif └── sectioned-ios.gif /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 26 | # Carthage/Checkouts 27 | 28 | Carthage/Build 29 | 30 | # We recommend against adding the Pods directory to your .gitignore. However 31 | # you should judge for yourself, the pros and cons are mentioned at: 32 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 33 | # 34 | # Note: if you ignore the Pods directory, make sure to uncomment 35 | # `pod install` in .travis.yml 36 | # 37 | # Pods/ 38 | 39 | videos/* -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.2 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/iOSEasyList.xcworkspace -scheme iOSEasyList-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'iOSEasyList_Example' do 4 | pod 'iOSEasyList', :path => '../' 5 | pod 'Moya' 6 | pod 'Kingfisher' 7 | pod 'RxGesture' 8 | pod 'RxKeyboard' 9 | 10 | target 'iOSEasyList_Tests' do 11 | inherit! :search_paths 12 | 13 | 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (4.5.1) 3 | - iOSEasyList (0.1.0) 4 | - Kingfisher (4.3.1) 5 | - Moya (10.0.1): 6 | - Moya/Core (= 10.0.1) 7 | - Moya/Core (10.0.1): 8 | - Alamofire (~> 4.1) 9 | - Result (~> 3.0) 10 | - Result (3.2.4) 11 | - RxCocoa (4.0.0): 12 | - RxSwift (~> 4.0) 13 | - RxGesture (1.2.1): 14 | - RxCocoa (~> 4.0) 15 | - RxSwift (~> 4.0) 16 | - RxKeyboard (0.7.1): 17 | - RxCocoa (>= 4.0.0) 18 | - RxSwift (>= 4.0.0) 19 | - RxSwift (4.0.0) 20 | 21 | DEPENDENCIES: 22 | - iOSEasyList (from `../`) 23 | - Kingfisher 24 | - Moya 25 | - RxGesture 26 | - RxKeyboard 27 | 28 | EXTERNAL SOURCES: 29 | iOSEasyList: 30 | :path: ../ 31 | 32 | SPEC CHECKSUMS: 33 | Alamofire: 2d95912bf4c34f164fdfc335872e8c312acaea4a 34 | iOSEasyList: 48064a899785741bff83065265d8f95091148605 35 | Kingfisher: 75541c4b62f02e1fde6f9772303de3d9ebe8f5b3 36 | Moya: 9e621707ff754eeb51ff3ec51a3d54e517c0733a 37 | Result: d2d07204ce72856f1fd9130bbe42c35a7b0fea10 38 | RxCocoa: d62846ca96495d862fa4c59ea7d87e5031d7340e 39 | RxGesture: c278eb05b187abd47e11e65464ae4de53ab71d95 40 | RxKeyboard: eae01da0d1750e1c4852d20798279cf7b318c304 41 | RxSwift: fd680d75283beb5e2559486f3c0ff852f0d35334 42 | 43 | PODFILE CHECKSUM: aa672dea372bc552e5f5fba3338c3571ce885757 44 | 45 | COCOAPODS: 1.3.1 46 | -------------------------------------------------------------------------------- /Example/Pods/Alamofire/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2017 Alamofire Software Foundation (http://alamofire.org/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/Pods/Kingfisher/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Wei Wang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Example/Pods/Kingfisher/Sources/Box.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Box.swift 3 | // Kingfisher 4 | // 5 | // Created by WANG WEI on 2016/09/12. 6 | // Copyright © 2016年 Wei Wang. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class Box { 12 | let value: T 13 | init(value: T) { 14 | self.value = value 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/Pods/Kingfisher/Sources/Kingfisher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Kingfisher.h 3 | // Kingfisher 4 | // 5 | // Created by Wei Wang on 15/4/6. 6 | // 7 | // Copyright (c) 2017 Wei Wang 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | #import 28 | 29 | //! Project version number for Kingfisher. 30 | FOUNDATION_EXPORT double KingfisherVersionNumber; 31 | 32 | //! Project version string for Kingfisher. 33 | FOUNDATION_EXPORT const unsigned char KingfisherVersionString[]; 34 | 35 | // In this header, you should import all the public headers of your framework using statements like #import 36 | 37 | 38 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/iOSEasyList.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iOSEasyList", 3 | "version": "0.1.0", 4 | "summary": "A short description of iOSEasyList.", 5 | "description": "TODO: Add long description of the pod here.", 6 | "homepage": "https://github.com/mostafa.taghipour@ymail.com/iOSEasyList", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "mostafa.taghipour@ymail.com": "mostafa.taghipour@ymail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/mostafa.taghipour@ymail.com/iOSEasyList.git", 16 | "tag": "0.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "iOSEasyList/Classes/**/*" 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (4.5.1) 3 | - iOSEasyList (0.1.0) 4 | - Kingfisher (4.3.1) 5 | - Moya (10.0.1): 6 | - Moya/Core (= 10.0.1) 7 | - Moya/Core (10.0.1): 8 | - Alamofire (~> 4.1) 9 | - Result (~> 3.0) 10 | - Result (3.2.4) 11 | - RxCocoa (4.0.0): 12 | - RxSwift (~> 4.0) 13 | - RxGesture (1.2.1): 14 | - RxCocoa (~> 4.0) 15 | - RxSwift (~> 4.0) 16 | - RxKeyboard (0.7.1): 17 | - RxCocoa (>= 4.0.0) 18 | - RxSwift (>= 4.0.0) 19 | - RxSwift (4.0.0) 20 | 21 | DEPENDENCIES: 22 | - iOSEasyList (from `../`) 23 | - Kingfisher 24 | - Moya 25 | - RxGesture 26 | - RxKeyboard 27 | 28 | EXTERNAL SOURCES: 29 | iOSEasyList: 30 | :path: ../ 31 | 32 | SPEC CHECKSUMS: 33 | Alamofire: 2d95912bf4c34f164fdfc335872e8c312acaea4a 34 | iOSEasyList: 48064a899785741bff83065265d8f95091148605 35 | Kingfisher: 75541c4b62f02e1fde6f9772303de3d9ebe8f5b3 36 | Moya: 9e621707ff754eeb51ff3ec51a3d54e517c0733a 37 | Result: d2d07204ce72856f1fd9130bbe42c35a7b0fea10 38 | RxCocoa: d62846ca96495d862fa4c59ea7d87e5031d7340e 39 | RxGesture: c278eb05b187abd47e11e65464ae4de53ab71d95 40 | RxKeyboard: eae01da0d1750e1c4852d20798279cf7b318c304 41 | RxSwift: fd680d75283beb5e2559486f3c0ff852f0d35334 42 | 43 | PODFILE CHECKSUM: aa672dea372bc552e5f5fba3338c3571ce885757 44 | 45 | COCOAPODS: 1.3.1 46 | -------------------------------------------------------------------------------- /Example/Pods/Moya/License.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Artsy, Ash Furrow 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/AnyEncodable.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct AnyEncodable: Encodable { 4 | 5 | private let encodable: Encodable 6 | 7 | public init(_ encodable: Encodable) { 8 | self.encodable = encodable 9 | } 10 | 11 | func encode(to encoder: Encoder) throws { 12 | try encodable.encode(to: encoder) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/Cancellable.swift: -------------------------------------------------------------------------------- 1 | /// Protocol to define the opaque type returned from a request 2 | public protocol Cancellable { 3 | var isCancelled: Bool { get } 4 | func cancel() 5 | } 6 | 7 | internal class CancellableWrapper: Cancellable { 8 | internal var innerCancellable: Cancellable = SimpleCancellable() 9 | 10 | var isCancelled: Bool { return innerCancellable.isCancelled } 11 | 12 | internal func cancel() { 13 | innerCancellable.cancel() 14 | } 15 | } 16 | 17 | internal class SimpleCancellable: Cancellable { 18 | var isCancelled = false 19 | func cancel() { 20 | isCancelled = true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/Image.swift: -------------------------------------------------------------------------------- 1 | #if os(iOS) || os(watchOS) || os(tvOS) 2 | import UIKit.UIImage 3 | public typealias ImageType = UIImage 4 | #elseif os(OSX) 5 | import AppKit.NSImage 6 | public typealias ImageType = NSImage 7 | #endif 8 | 9 | /// An alias for the SDK's image type. 10 | public typealias Image = ImageType 11 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/MoyaProvider+Defaults.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// These functions are default mappings to `MoyaProvider`'s properties: endpoints, requests, manager, etc. 4 | public extension MoyaProvider { 5 | public final class func defaultEndpointMapping(for target: Target) -> Endpoint { 6 | return Endpoint( 7 | url: URL(target: target).absoluteString, 8 | sampleResponseClosure: { .networkResponse(200, target.sampleData) }, 9 | method: target.method, 10 | task: target.task, 11 | httpHeaderFields: target.headers 12 | ) 13 | } 14 | 15 | public final class func defaultRequestMapping(for endpoint: Endpoint, closure: RequestResultClosure) { 16 | do { 17 | let urlRequest = try endpoint.urlRequest() 18 | closure(.success(urlRequest)) 19 | } catch MoyaError.requestMapping(let url) { 20 | closure(.failure(MoyaError.requestMapping(url))) 21 | } catch MoyaError.parameterEncoding(let error) { 22 | closure(.failure(MoyaError.parameterEncoding(error))) 23 | } catch { 24 | closure(.failure(MoyaError.underlying(error, nil))) 25 | } 26 | } 27 | 28 | public final class func defaultAlamofireManager() -> Manager { 29 | let configuration = URLSessionConfiguration.default 30 | configuration.httpAdditionalHeaders = Manager.defaultHTTPHeaders 31 | 32 | let manager = Manager(configuration: configuration) 33 | manager.startRequestsImmediately = false 34 | return manager 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/MultiTarget.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// A `TargetType` used to enable `MoyaProvider` to process multiple `TargetType`s. 4 | public enum MultiTarget: TargetType { 5 | /// The embedded `TargetType`. 6 | case target(TargetType) 7 | 8 | public init(_ target: TargetType) { 9 | self = MultiTarget.target(target) 10 | } 11 | 12 | public var path: String { 13 | return target.path 14 | } 15 | 16 | public var baseURL: URL { 17 | return target.baseURL 18 | } 19 | 20 | public var method: Moya.Method { 21 | return target.method 22 | } 23 | 24 | public var sampleData: Data { 25 | return target.sampleData 26 | } 27 | 28 | public var task: Task { 29 | return target.task 30 | } 31 | 32 | public var validate: Bool { 33 | return target.validate 34 | } 35 | 36 | public var headers: [String: String]? { 37 | return target.headers 38 | } 39 | 40 | /// The embedded `TargetType`. 41 | public var target: TargetType { 42 | switch self { 43 | case .target(let t): return t 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/Plugins/CredentialsPlugin.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Result 3 | 4 | /// Provides each request with optional URLCredentials. 5 | public final class CredentialsPlugin: PluginType { 6 | 7 | public typealias CredentialClosure = (TargetType) -> URLCredential? 8 | let credentialsClosure: CredentialClosure 9 | 10 | public init(credentialsClosure: @escaping CredentialClosure) { 11 | self.credentialsClosure = credentialsClosure 12 | } 13 | 14 | // MARK: Plugin 15 | 16 | public func willSend(_ request: RequestType, target: TargetType) { 17 | if let credentials = credentialsClosure(target) { 18 | _ = request.authenticate(usingCredential: credentials) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/Plugins/NetworkActivityPlugin.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Result 3 | 4 | /// Network activity change notification type. 5 | public enum NetworkActivityChangeType { 6 | case began, ended 7 | } 8 | 9 | /// Notify a request's network activity changes (request begins or ends). 10 | public final class NetworkActivityPlugin: PluginType { 11 | 12 | public typealias NetworkActivityClosure = (_ change: NetworkActivityChangeType, _ target: TargetType) -> Void 13 | let networkActivityClosure: NetworkActivityClosure 14 | 15 | public init(networkActivityClosure: @escaping NetworkActivityClosure) { 16 | self.networkActivityClosure = networkActivityClosure 17 | } 18 | 19 | // MARK: Plugin 20 | 21 | /// Called by the provider as soon as the request is about to start 22 | public func willSend(_ request: RequestType, target: TargetType) { 23 | networkActivityClosure(.began, target) 24 | } 25 | 26 | /// Called by the provider as soon as a response arrives, even if the request is canceled. 27 | public func didReceive(_ result: Result, target: TargetType) { 28 | networkActivityClosure(.ended, target) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/TargetType.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// The protocol used to define the specifications necessary for a `MoyaProvider`. 4 | public protocol TargetType { 5 | 6 | /// The target's base `URL`. 7 | var baseURL: URL { get } 8 | 9 | /// The path to be appended to `baseURL` to form the full `URL`. 10 | var path: String { get } 11 | 12 | /// The HTTP method used in the request. 13 | var method: Moya.Method { get } 14 | 15 | /// Provides stub data for use in testing. 16 | var sampleData: Data { get } 17 | 18 | /// The type of HTTP task to be performed. 19 | var task: Task { get } 20 | 21 | /// Whether or not to perform Alamofire validation. Defaults to `false`. 22 | var validate: Bool { get } 23 | 24 | /// The headers to be used in the request. 25 | var headers: [String: String]? { get } 26 | } 27 | 28 | public extension TargetType { 29 | var validate: Bool { 30 | return false 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/Task.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Represents an HTTP task. 4 | public enum Task { 5 | 6 | /// A request with no additional data. 7 | case requestPlain 8 | 9 | /// A requests body set with data. 10 | case requestData(Data) 11 | 12 | /// A request body set with `Encodable` type 13 | case requestJSONEncodable(Encodable) 14 | 15 | /// A requests body set with encoded parameters. 16 | case requestParameters(parameters: [String: Any], encoding: ParameterEncoding) 17 | 18 | /// A requests body set with data, combined with url parameters. 19 | case requestCompositeData(bodyData: Data, urlParameters: [String: Any]) 20 | 21 | /// A requests body set with encoded parameters combined with url parameters. 22 | case requestCompositeParameters(bodyParameters: [String: Any], bodyEncoding: ParameterEncoding, urlParameters: [String: Any]) 23 | 24 | /// A file upload task. 25 | case uploadFile(URL) 26 | 27 | /// A "multipart/form-data" upload task. 28 | case uploadMultipart([MultipartFormData]) 29 | 30 | /// A "multipart/form-data" upload task combined with url parameters. 31 | case uploadCompositeMultipart([MultipartFormData], urlParameters: [String: Any]) 32 | 33 | /// A file download task to a destination. 34 | case downloadDestination(DownloadDestination) 35 | 36 | /// A file download task to a destination with extra parameters using the given encoding. 37 | case downloadParameters(parameters: [String: Any], encoding: ParameterEncoding, destination: DownloadDestination) 38 | } 39 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/URL+Moya.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public extension URL { 4 | 5 | /// Initialize URL from Moya's `TargetType`. 6 | init(target: T) { 7 | // When a TargetType's path is empty, URL.appendingPathComponent may introduce trailing /, which may not be wanted in some cases 8 | // See: https://github.com/Moya/Moya/pull/1053 9 | // And: https://github.com/Moya/Moya/issues/1049 10 | if target.path.isEmpty { 11 | self = target.baseURL 12 | } else { 13 | self = target.baseURL.appendingPathComponent(target.path) 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/Pods/Moya/Sources/Moya/URLRequest+Encoding.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | internal extension URLRequest { 4 | 5 | mutating func encoded(encodable: Encodable) throws -> URLRequest { 6 | do { 7 | let encodable = AnyEncodable(encodable) 8 | httpBody = try JSONEncoder().encode(encodable) 9 | 10 | let contentTypeHeaderName = "Content-Type" 11 | if value(forHTTPHeaderField: contentTypeHeaderName) == nil { 12 | setValue("application/json", forHTTPHeaderField: contentTypeHeaderName) 13 | } 14 | 15 | return self 16 | } catch { 17 | throw MoyaError.encodableMapping(error) 18 | } 19 | } 20 | 21 | func encoded(parameters: [String: Any], parameterEncoding: ParameterEncoding) throws -> URLRequest { 22 | do { 23 | return try parameterEncoding.encode(self, with: parameters) 24 | } catch { 25 | throw MoyaError.parameterEncoding(error) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/Pods/Result/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Rob Rix 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/LICENSE.md: -------------------------------------------------------------------------------- 1 | **The MIT License** 2 | **Copyright © 2015 Krunoslav Zaher** 3 | **All rights reserved.** 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/Platform/DataStructures/InfiniteSequence.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InfiniteSequence.swift 3 | // Platform 4 | // 5 | // Created by Krunoslav Zaher on 6/13/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Sequence that repeats `repeatedValue` infinite number of times. 10 | struct InfiniteSequence : Sequence { 11 | typealias Element = E 12 | typealias Iterator = AnyIterator 13 | 14 | private let _repeatedValue: E 15 | 16 | init(repeatedValue: E) { 17 | _repeatedValue = repeatedValue 18 | } 19 | 20 | func makeIterator() -> Iterator { 21 | let repeatedValue = _repeatedValue 22 | return AnyIterator { 23 | return repeatedValue 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/Platform/DispatchQueue+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchQueue+Extensions.swift 3 | // Platform 4 | // 5 | // Created by Krunoslav Zaher on 10/22/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import Dispatch 10 | 11 | extension DispatchQueue { 12 | private static var token: DispatchSpecificKey<()> = { 13 | let key = DispatchSpecificKey<()>() 14 | DispatchQueue.main.setSpecific(key: key, value: ()) 15 | return key 16 | }() 17 | 18 | static var isMain: Bool { 19 | return DispatchQueue.getSpecific(key: token) != nil 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/Platform/RecursiveLock.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecursiveLock.swift 3 | // Platform 4 | // 5 | // Created by Krunoslav Zaher on 12/18/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import class Foundation.NSRecursiveLock 10 | 11 | #if TRACE_RESOURCES 12 | class RecursiveLock: NSRecursiveLock { 13 | override init() { 14 | _ = Resources.incrementTotal() 15 | super.init() 16 | } 17 | 18 | override func lock() { 19 | super.lock() 20 | _ = Resources.incrementTotal() 21 | } 22 | 23 | override func unlock() { 24 | super.unlock() 25 | _ = Resources.decrementTotal() 26 | } 27 | 28 | deinit { 29 | _ = Resources.decrementTotal() 30 | } 31 | } 32 | #else 33 | typealias RecursiveLock = NSRecursiveLock 34 | #endif 35 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Common/NSLayoutConstraint+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 12/6/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !os(Linux) 10 | 11 | #if os(macOS) 12 | import Cocoa 13 | #else 14 | import UIKit 15 | #endif 16 | 17 | #if !RX_NO_MODULE 18 | import RxSwift 19 | #endif 20 | 21 | #if os(iOS) || os(macOS) || os(tvOS) 22 | extension Reactive where Base: NSLayoutConstraint { 23 | /// Bindable sink for `constant` property. 24 | public var constant: Binder { 25 | return Binder(self.base) { constraint, constant in 26 | constraint.constant = constant 27 | } 28 | } 29 | 30 | /// Bindable sink for `active` property. 31 | @available(iOS 8, OSX 10.10, *) 32 | public var active: Binder { 33 | return Binder(self.base) { constraint, value in 34 | constraint.isActive = value 35 | } 36 | } 37 | } 38 | 39 | #endif 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Common/RxTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTarget.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 7/12/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import class Foundation.NSObject 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | 15 | class RxTarget : NSObject 16 | , Disposable { 17 | 18 | private var retainSelf: RxTarget? 19 | 20 | override init() { 21 | super.init() 22 | self.retainSelf = self 23 | 24 | #if TRACE_RESOURCES 25 | _ = Resources.incrementTotal() 26 | #endif 27 | 28 | #if DEBUG 29 | MainScheduler.ensureExecutingOnScheduler() 30 | #endif 31 | } 32 | 33 | func dispose() { 34 | #if DEBUG 35 | MainScheduler.ensureExecutingOnScheduler() 36 | #endif 37 | self.retainSelf = nil 38 | } 39 | 40 | #if TRACE_RESOURCES 41 | deinit { 42 | _ = Resources.decrementTotal() 43 | } 44 | #endif 45 | } 46 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Common/SectionedViewDataSourceType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SectionedViewDataSourceType.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 1/10/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import struct Foundation.IndexPath 10 | 11 | /// Data source with access to underlying sectioned model. 12 | public protocol SectionedViewDataSourceType { 13 | /// Returns model at index path. 14 | /// 15 | /// In case data source doesn't contain any sections when this method is being called, `RxCocoaError.ItemsNotYetBound(object: self)` is thrown. 16 | 17 | /// - parameter indexPath: Model index path 18 | /// - returns: Model at index path. 19 | func model(at indexPath: IndexPath) throws -> Any 20 | } 21 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KVORepresentable.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 11/14/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Type that is KVO representable (KVO mechanism can be used to observe it). 10 | public protocol KVORepresentable { 11 | /// Associated KVO type. 12 | associatedtype KVOType 13 | 14 | /// Constructs `Self` using KVO value. 15 | init?(KVOValue: KVOType) 16 | } 17 | 18 | extension KVORepresentable { 19 | /// Initializes `KVORepresentable` with optional value. 20 | init?(KVOValue: KVOType?) { 21 | guard let KVOValue = KVOValue else { 22 | return nil 23 | } 24 | 25 | self.init(KVOValue: KVOValue) 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Foundation/Logging.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Logging.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 4/3/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import struct Foundation.URLRequest 10 | 11 | /// Simple logging settings for RxCocoa library. 12 | public struct Logging { 13 | public typealias LogURLRequest = (URLRequest) -> Bool 14 | 15 | /// Log URL requests to standard output in curl format. 16 | public static var URLRequests: LogURLRequest = { _ in 17 | #if DEBUG 18 | return true 19 | #else 20 | return false 21 | #endif 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Foundation/NotificationCenter+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationCenter+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 5/2/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import class Foundation.NotificationCenter 10 | import struct Foundation.Notification 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: NotificationCenter { 17 | /** 18 | Transforms notifications posted to notification center to observable sequence of notifications. 19 | 20 | - parameter name: Optional name used to filter notifications. 21 | - parameter object: Optional object used to filter notifications. 22 | - returns: Observable sequence of posted notifications. 23 | */ 24 | public func notification(_ name: Notification.Name?, object: AnyObject? = nil) -> Observable { 25 | return Observable.create { [weak object] observer in 26 | let nsObserver = self.base.addObserver(forName: name, object: object, queue: nil) { notification in 27 | observer.on(.next(notification)) 28 | } 29 | 30 | return Disposables.create { 31 | self.base.removeObserver(nsObserver) 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Runtime/_RX.m: -------------------------------------------------------------------------------- 1 | // 2 | // _RX.m 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 7/12/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #import "include/_RX.h" 10 | 11 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Runtime/_RXKVOObserver.m: -------------------------------------------------------------------------------- 1 | // 2 | // _RXKVOObserver.m 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 7/11/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #import "include/_RXKVOObserver.h" 10 | 11 | @interface _RXKVOObserver () 12 | 13 | @property (nonatomic, unsafe_unretained) id target; 14 | @property (nonatomic, strong ) id retainedTarget; 15 | @property (nonatomic, copy ) NSString *keyPath; 16 | @property (nonatomic, copy ) void (^callback)(id); 17 | 18 | @end 19 | 20 | @implementation _RXKVOObserver 21 | 22 | -(instancetype)initWithTarget:(id)target 23 | retainTarget:(BOOL)retainTarget 24 | keyPath:(NSString*)keyPath 25 | options:(NSKeyValueObservingOptions)options 26 | callback:(void (^)(id))callback { 27 | self = [super init]; 28 | if (!self) return nil; 29 | 30 | self.target = target; 31 | if (retainTarget) { 32 | self.retainedTarget = target; 33 | } 34 | self.keyPath = keyPath; 35 | self.callback = callback; 36 | 37 | [self.target addObserver:self forKeyPath:self.keyPath options:options context:nil]; 38 | 39 | return self; 40 | } 41 | 42 | -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 43 | @synchronized(self) { 44 | self.callback(change[NSKeyValueChangeNewKey]); 45 | } 46 | } 47 | 48 | -(void)dispose { 49 | [self.target removeObserver:self forKeyPath:self.keyPath context:nil]; 50 | self.target = nil; 51 | self.retainedTarget = nil; 52 | } 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h: -------------------------------------------------------------------------------- 1 | // 2 | // RxCocoaRuntime.h 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 2/21/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "_RX.h" 11 | #import "_RXDelegateProxy.h" 12 | #import "_RXKVOObserver.h" 13 | #import "_RXObjCRuntime.h" 14 | 15 | //! Project version number for RxCocoa. 16 | FOUNDATION_EXPORT double RxCocoaVersionNumber; 17 | 18 | //! Project version string for RxCocoa. 19 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[]; 20 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h: -------------------------------------------------------------------------------- 1 | // 2 | // _RXDelegateProxy.h 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 7/4/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface _RXDelegateProxy : NSObject 14 | 15 | @property (nonatomic, weak, readonly) id _forwardToDelegate; 16 | 17 | -(void)_setForwardToDelegate:(id __nullable)forwardToDelegate retainDelegate:(BOOL)retainDelegate NS_SWIFT_NAME(_setForwardToDelegate(_:retainDelegate:)) ; 18 | 19 | -(BOOL)hasWiredImplementationForSelector:(SEL)selector; 20 | -(BOOL)voidDelegateMethodsContain:(SEL)selector; 21 | 22 | -(void)_sentMessage:(SEL)selector withArguments:(NSArray*)arguments; 23 | -(void)_methodInvoked:(SEL)selector withArguments:(NSArray*)arguments; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h: -------------------------------------------------------------------------------- 1 | // 2 | // _RXKVOObserver.h 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 7/11/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | ################################################################################ 13 | This file is part of RX private API 14 | ################################################################################ 15 | */ 16 | 17 | // Exists because if written in Swift, reading unowned is disabled during dealloc process 18 | @interface _RXKVOObserver : NSObject 19 | 20 | -(instancetype)initWithTarget:(id)target 21 | retainTarget:(BOOL)retainTarget 22 | keyPath:(NSString*)keyPath 23 | options:(NSKeyValueObservingOptions)options 24 | callback:(void (^)(id))callback; 25 | 26 | -(void)dispose; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/RxCocoa.h: -------------------------------------------------------------------------------- 1 | // 2 | // RxCocoa.h 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 2/21/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "_RX.h" 11 | #import "_RXDelegateProxy.h" 12 | #import "_RXKVOObserver.h" 13 | #import "_RXObjCRuntime.h" 14 | 15 | //! Project version number for RxCocoa. 16 | FOUNDATION_EXPORT double RxCocoaVersionNumber; 17 | 18 | //! Project version string for RxCocoa. 19 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[]; -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Traits/BehaviorRelay.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BehaviorRelay.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 10/7/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !RX_NO_MODULE 10 | import RxSwift 11 | #endif 12 | 13 | /// BehaviorRelay is a wrapper for `BehaviorSubject`. 14 | /// 15 | /// Unlike `BehaviorSubject` it can't terminate with error or completed. 16 | public final class BehaviorRelay: ObservableType { 17 | public typealias E = Element 18 | 19 | private let _subject: BehaviorSubject 20 | 21 | // Accepts `event` and emits it to subscribers 22 | public func accept(_ event: Element) { 23 | _subject.onNext(event) 24 | } 25 | 26 | /// Current value of behavior subject 27 | public var value: Element { 28 | // this try! is ok because subject can't error out or be disposed 29 | return try! _subject.value() 30 | } 31 | 32 | /// Initializes variable with initial value. 33 | public init(value: Element) { 34 | _subject = BehaviorSubject(value: value) 35 | } 36 | 37 | /// Subscribes observer 38 | public func subscribe(_ observer: O) -> Disposable where O.E == E { 39 | return _subject.subscribe(observer) 40 | } 41 | 42 | /// - returns: Canonical interface for push style sequence 43 | public func asObservable() -> Observable { 44 | return _subject.asObservable() 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BehaviorRelay+Driver.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 10/7/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !RX_NO_MODULE 10 | import RxSwift 11 | #endif 12 | 13 | extension BehaviorRelay { 14 | /// Converts `BehaviorRelay` to `Driver`. 15 | /// 16 | /// - returns: Observable sequence. 17 | public func asDriver() -> Driver { 18 | let source = self.asObservable() 19 | .observeOn(DriverSharingStrategy.scheduler) 20 | return SharedSequence(source) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlEvent+Driver.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ControlEvent+Driver.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 9/19/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !RX_NO_MODULE 10 | import RxSwift 11 | #endif 12 | 13 | extension ControlEvent { 14 | /// Converts `ControlEvent` to `Driver` trait. 15 | /// 16 | /// `ControlEvent` already can't fail, so no special case needs to be handled. 17 | public func asDriver() -> Driver { 18 | return self.asDriver { (error) -> Driver in 19 | #if DEBUG 20 | rxFatalError("Somehow driver received error from a source that shouldn't fail.") 21 | #else 22 | return Driver.empty() 23 | #endif 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlProperty+Driver.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ControlProperty+Driver.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 9/19/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !RX_NO_MODULE 10 | import RxSwift 11 | #endif 12 | 13 | extension ControlProperty { 14 | /// Converts `ControlProperty` to `Driver` trait. 15 | /// 16 | /// `ControlProperty` already can't fail, so no special case needs to be handled. 17 | public func asDriver() -> Driver { 18 | return self.asDriver { (error) -> Driver in 19 | #if DEBUG 20 | rxFatalError("Somehow driver received error from a source that shouldn't fail.") 21 | #else 22 | return Driver.empty() 23 | #endif 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Traits/PublishRelay.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PublishRelay.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 3/28/15. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !RX_NO_MODULE 10 | import RxSwift 11 | #endif 12 | 13 | /// PublishRelay is a wrapper for `PublishSubject`. 14 | /// 15 | /// Unlike `PublishSubject` it can't terminate with error or completed. 16 | public final class PublishRelay: ObservableType { 17 | public typealias E = Element 18 | 19 | private let _subject: PublishSubject 20 | 21 | // Accepts `event` and emits it to subscribers 22 | public func accept(_ event: Element) { 23 | _subject.onNext(event) 24 | } 25 | 26 | /// Initializes variable with initial value. 27 | public init() { 28 | _subject = PublishSubject() 29 | } 30 | 31 | /// Subscribes observer 32 | public func subscribe(_ observer: O) -> Disposable where O.E == E { 33 | return _subject.subscribe(observer) 34 | } 35 | 36 | /// - returns: Canonical interface for push style sequence 37 | public func asObservable() -> Observable { 38 | return _subject.asObservable() 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/Traits/Signal/PublishRelay+Signal.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PublishRelay+Signal.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 12/28/15. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if !RX_NO_MODULE 10 | import RxSwift 11 | #endif 12 | 13 | extension PublishRelay { 14 | /// Converts `PublishRelay` to `Signal`. 15 | /// 16 | /// - returns: Observable sequence. 17 | public func asSignal() -> Signal { 18 | let source = self.asObservable() 19 | .observeOn(SignalSharingStrategy.scheduler) 20 | return SharedSequence(source) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Events/ItemEvents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ItemEvents.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 6/20/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | import UIKit 11 | 12 | public typealias ItemMovedEvent = (sourceIndex: IndexPath, destinationIndex: IndexPath) 13 | public typealias WillDisplayCellEvent = (cell: UITableViewCell, indexPath: IndexPath) 14 | public typealias DidEndDisplayingCellEvent = (cell: UITableViewCell, indexPath: IndexPath) 15 | #endif 16 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/NSTextStorage+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextStorage+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Segii Shulga on 12/30/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | #if !RX_NO_MODULE 11 | import RxSwift 12 | #endif 13 | import UIKit 14 | 15 | extension Reactive where Base: NSTextStorage { 16 | 17 | /// Reactive wrapper for `delegate`. 18 | /// 19 | /// For more information take a look at `DelegateProxyType` protocol documentation. 20 | public var delegate: DelegateProxy { 21 | return RxTextStorageDelegateProxy.proxy(for: base) 22 | } 23 | 24 | /// Reactive wrapper for `delegate` message. 25 | public var didProcessEditingRangeChangeInLength: Observable<(editedMask:NSTextStorageEditActions, editedRange:NSRange, delta:Int)> { 26 | return delegate 27 | .methodInvoked(#selector(NSTextStorageDelegate.textStorage(_:didProcessEditing:range:changeInLength:))) 28 | .map { a in 29 | let editedMask = NSTextStorageEditActions(rawValue: try castOrThrow(UInt.self, a[1]) ) 30 | let editedRange = try castOrThrow(NSValue.self, a[2]).rangeValue 31 | let delta = try castOrThrow(Int.self, a[3]) 32 | 33 | return (editedMask, editedRange, delta) 34 | } 35 | } 36 | } 37 | #endif 38 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxCollectionViewDataSourceType.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 6/29/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | /// Marks data source as `UICollectionView` reactive data source enabling it to be used with one of the `bindTo` methods. 17 | public protocol RxCollectionViewDataSourceType /*: UICollectionViewDataSource*/ { 18 | 19 | /// Type of elements that can be bound to collection view. 20 | associatedtype Element 21 | 22 | /// New observable sequence event observed. 23 | /// 24 | /// - parameter collectionView: Bound collection view. 25 | /// - parameter observedEvent: Event 26 | func collectionView(_ collectionView: UICollectionView, observedEvent: Event) -> Void 27 | } 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxPickerViewDataSourceType.swift 3 | // RxCocoa 4 | // 5 | // Created by Sergey Shulga on 05/07/2017. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | /// Marks data source as `UIPickerView` reactive data source enabling it to be used with one of the `bindTo` methods. 17 | public protocol RxPickerViewDataSourceType { 18 | /// Type of elements that can be bound to picker view. 19 | associatedtype Element 20 | 21 | /// New observable sequence event observed. 22 | /// 23 | /// - parameter pickerView: Bound picker view. 24 | /// - parameter observedEvent: Event 25 | func pickerView(_ pickerView: UIPickerView, observedEvent: Event) 26 | } 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTableViewDataSourceType.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 6/26/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | /// Marks data source as `UITableView` reactive data source enabling it to be used with one of the `bindTo` methods. 17 | public protocol RxTableViewDataSourceType /*: UITableViewDataSource*/ { 18 | 19 | /// Type of elements that can be bound to table view. 20 | associatedtype Element 21 | 22 | /// New observable sequence event observed. 23 | /// 24 | /// - parameter tableView: Bound table view. 25 | /// - parameter observedEvent: Event 26 | func tableView(_ tableView: UITableView, observedEvent: Event) -> Void 27 | } 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxCollectionViewDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 6/29/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | /// For more information take a look at `DelegateProxyType`. 17 | open class RxCollectionViewDelegateProxy 18 | : RxScrollViewDelegateProxy 19 | , UICollectionViewDelegate 20 | , UICollectionViewDelegateFlowLayout { 21 | 22 | /// Typed parent object. 23 | public weak private(set) var collectionView: UICollectionView? 24 | 25 | /// Initializes `RxCollectionViewDelegateProxy` 26 | /// 27 | /// - parameter collectionView: Parent object for delegate proxy. 28 | public init(collectionView: UICollectionView) { 29 | self.collectionView = collectionView 30 | super.init(scrollView: collectionView) 31 | } 32 | } 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxNavigationControllerDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Diogo on 13/04/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension UINavigationController: HasDelegate { 17 | public typealias Delegate = UINavigationControllerDelegate 18 | } 19 | 20 | /// For more information take a look at `DelegateProxyType`. 21 | open class RxNavigationControllerDelegateProxy 22 | : DelegateProxy 23 | , DelegateProxyType 24 | , UINavigationControllerDelegate { 25 | 26 | /// Typed parent object. 27 | public weak private(set) var navigationController: UINavigationController? 28 | 29 | /// - parameter navigationController: Parent object for delegate proxy. 30 | public init(navigationController: ParentObject) { 31 | self.navigationController = navigationController 32 | super.init(parentObject: navigationController, delegateProxy: RxNavigationControllerDelegateProxy.self) 33 | } 34 | 35 | // Register known implementations 36 | public static func registerKnownImplementations() { 37 | self.register { RxNavigationControllerDelegateProxy(navigationController: $0) } 38 | } 39 | } 40 | #endif 41 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxPickerViewDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Segii Shulga on 5/12/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension UIPickerView: HasDelegate { 17 | public typealias Delegate = UIPickerViewDelegate 18 | } 19 | 20 | open class RxPickerViewDelegateProxy 21 | : DelegateProxy 22 | , DelegateProxyType 23 | , UIPickerViewDelegate { 24 | 25 | /// Typed parent object. 26 | public weak private(set) var pickerView: UIPickerView? 27 | 28 | /// - parameter pickerView: Parent object for delegate proxy. 29 | public init(pickerView: ParentObject) { 30 | self.pickerView = pickerView 31 | super.init(parentObject: pickerView, delegateProxy: RxPickerViewDelegateProxy.self) 32 | } 33 | 34 | // Register known implementationss 35 | public static func registerKnownImplementations() { 36 | self.register { RxPickerViewDelegateProxy(pickerView: $0) } 37 | } 38 | } 39 | #endif 40 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxSearchBarDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 7/4/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension UISearchBar: HasDelegate { 17 | public typealias Delegate = UISearchBarDelegate 18 | } 19 | 20 | /// For more information take a look at `DelegateProxyType`. 21 | open class RxSearchBarDelegateProxy 22 | : DelegateProxy 23 | , DelegateProxyType 24 | , UISearchBarDelegate { 25 | 26 | /// Typed parent object. 27 | public weak private(set) var searchBar: UISearchBar? 28 | 29 | /// - parameter searchBar: Parent object for delegate proxy. 30 | public init(searchBar: ParentObject) { 31 | self.searchBar = searchBar 32 | super.init(parentObject: searchBar, delegateProxy: RxSearchBarDelegateProxy.self) 33 | } 34 | 35 | // Register known implementations 36 | public static func registerKnownImplementations() { 37 | self.register { RxSearchBarDelegateProxy(searchBar: $0) } 38 | } 39 | } 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxSearchControllerDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Segii Shulga on 3/17/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension UISearchController: HasDelegate { 17 | public typealias Delegate = UISearchControllerDelegate 18 | } 19 | 20 | /// For more information take a look at `DelegateProxyType`. 21 | @available(iOS 8.0, *) 22 | open class RxSearchControllerDelegateProxy 23 | : DelegateProxy 24 | , DelegateProxyType 25 | , UISearchControllerDelegate { 26 | 27 | /// Typed parent object. 28 | public weak private(set) var searchController: UISearchController? 29 | 30 | /// - parameter searchController: Parent object for delegate proxy. 31 | public init(searchController: UISearchController) { 32 | self.searchController = searchController 33 | super.init(parentObject: searchController, delegateProxy: RxSearchControllerDelegateProxy.self) 34 | } 35 | 36 | // Register known implementations 37 | public static func registerKnownImplementations() { 38 | self.register { RxSearchControllerDelegateProxy(searchController: $0) } 39 | } 40 | } 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTabBarControllerDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Yusuke Kita on 2016/12/07. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension UITabBarController: HasDelegate { 17 | public typealias Delegate = UITabBarControllerDelegate 18 | } 19 | 20 | /// For more information take a look at `DelegateProxyType`. 21 | open class RxTabBarControllerDelegateProxy 22 | : DelegateProxy 23 | , DelegateProxyType 24 | , UITabBarControllerDelegate { 25 | 26 | /// Typed parent object. 27 | public weak private(set) var tabBar: UITabBarController? 28 | 29 | /// - parameter tabBar: Parent object for delegate proxy. 30 | public init(tabBar: ParentObject) { 31 | self.tabBar = tabBar 32 | super.init(parentObject: tabBar, delegateProxy: RxTabBarControllerDelegateProxy.self) 33 | } 34 | 35 | // Register known implementations 36 | public static func registerKnownImplementations() { 37 | self.register { RxTabBarControllerDelegateProxy(tabBar: $0) } 38 | } 39 | } 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTabBarDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Jesse Farless on 5/14/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension UITabBar: HasDelegate { 17 | public typealias Delegate = UITabBarDelegate 18 | } 19 | 20 | /// For more information take a look at `DelegateProxyType`. 21 | open class RxTabBarDelegateProxy 22 | : DelegateProxy 23 | , DelegateProxyType 24 | , UITabBarDelegate { 25 | 26 | /// Typed parent object. 27 | public weak private(set) var tabBar: UITabBar? 28 | 29 | /// - parameter tabBar: Parent object for delegate proxy. 30 | public init(tabBar: ParentObject) { 31 | self.tabBar = tabBar 32 | super.init(parentObject: tabBar, delegateProxy: RxTabBarDelegateProxy.self) 33 | } 34 | 35 | // Register known implementations 36 | public static func registerKnownImplementations() { 37 | self.register { RxTabBarDelegateProxy(tabBar: $0) } 38 | } 39 | 40 | /// For more information take a look at `DelegateProxyType`. 41 | open class func currentDelegate(for object: ParentObject) -> UITabBarDelegate? { 42 | return object.delegate 43 | } 44 | 45 | /// For more information take a look at `DelegateProxyType`. 46 | open class func setCurrentDelegate(_ delegate: UITabBarDelegate?, to object: ParentObject) { 47 | object.delegate = delegate 48 | } 49 | } 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTableViewDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 6/15/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | /// For more information take a look at `DelegateProxyType`. 17 | open class RxTableViewDelegateProxy 18 | : RxScrollViewDelegateProxy 19 | , UITableViewDelegate { 20 | 21 | /// Typed parent object. 22 | public weak private(set) var tableView: UITableView? 23 | 24 | /// - parameter tableView: Parent object for delegate proxy. 25 | public init(tableView: UITableView) { 26 | self.tableView = tableView 27 | super.init(scrollView: tableView) 28 | } 29 | 30 | } 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTextStorageDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Segii Shulga on 12/30/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension NSTextStorage: HasDelegate { 17 | public typealias Delegate = NSTextStorageDelegate 18 | } 19 | 20 | open class RxTextStorageDelegateProxy 21 | : DelegateProxy 22 | , DelegateProxyType 23 | , NSTextStorageDelegate { 24 | 25 | /// Typed parent object. 26 | public weak private(set) var textStorage: NSTextStorage? 27 | 28 | /// - parameter textStorage: Parent object for delegate proxy. 29 | public init(textStorage: NSTextStorage) { 30 | self.textStorage = textStorage 31 | super.init(parentObject: textStorage, delegateProxy: RxTextStorageDelegateProxy.self) 32 | } 33 | 34 | // Register known implementations 35 | public static func registerKnownImplementations() { 36 | self.register { RxTextStorageDelegateProxy(textStorage: $0) } 37 | } 38 | } 39 | #endif 40 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxTextViewDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Yuta ToKoRo on 7/19/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | /// For more information take a look at `DelegateProxyType`. 17 | open class RxTextViewDelegateProxy 18 | : RxScrollViewDelegateProxy 19 | , UITextViewDelegate { 20 | 21 | /// Typed parent object. 22 | public weak private(set) var textView: UITextView? 23 | 24 | /// - parameter textview: Parent object for delegate proxy. 25 | public init(textView: UITextView) { 26 | self.textView = textView 27 | super.init(scrollView: textView) 28 | } 29 | 30 | // MARK: delegate methods 31 | 32 | /// For more information take a look at `DelegateProxyType`. 33 | @objc open func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 34 | /** 35 | We've had some issues with observing text changes. This is here just in case we need the same hack in future and that 36 | we wouldn't need to change the public interface. 37 | */ 38 | let forwardToDelegate = self.forwardToDelegate() as? UITextViewDelegate 39 | return forwardToDelegate?.textView?(textView, 40 | shouldChangeTextIn: range, 41 | replacementText: text) ?? true 42 | } 43 | } 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxWebViewDelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxWebViewDelegateProxy.swift 3 | // RxCocoa 4 | // 5 | // Created by Andrew Breckenridge on 9/26/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension UIWebView: HasDelegate { 17 | public typealias Delegate = UIWebViewDelegate 18 | } 19 | 20 | open class RxWebViewDelegateProxy 21 | : DelegateProxy 22 | , DelegateProxyType 23 | , UIWebViewDelegate { 24 | 25 | /// Typed parent object. 26 | public weak private(set) var webView: UIWebView? 27 | 28 | /// - parameter webView: Parent object for delegate proxy. 29 | public init(webView: ParentObject) { 30 | self.webView = webView 31 | super.init(parentObject: webView, delegateProxy: RxWebViewDelegateProxy.self) 32 | } 33 | 34 | // Register known implementations 35 | public static func registerKnownImplementations() { 36 | self.register { RxWebViewDelegateProxy(webView: $0) } 37 | } 38 | } 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIActivityIndicatorView+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIActivityIndicatorView+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Ivan Persidskiy on 02/12/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UIActivityIndicatorView { 17 | 18 | /// Bindable sink for `startAnimating()`, `stopAnimating()` methods. 19 | public var isAnimating: Binder { 20 | return Binder(self.base) { activityIndicator, active in 21 | if active { 22 | activityIndicator.startAnimating() 23 | } else { 24 | activityIndicator.stopAnimating() 25 | } 26 | } 27 | } 28 | 29 | } 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIAlertAction+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIAlertAction+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Andrew Breckenridge on 5/7/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | 13 | #if !RX_NO_MODULE 14 | import RxSwift 15 | #endif 16 | 17 | extension Reactive where Base: UIAlertAction { 18 | 19 | /// Bindable sink for `enabled` property. 20 | public var isEnabled: Binder { 21 | return Binder(self.base) { alertAction, value in 22 | alertAction.isEnabled = value 23 | } 24 | } 25 | 26 | } 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIApplication+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIApplication+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Mads Bøgeskov on 18/01/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UIApplication { 17 | 18 | /// Bindable sink for `networkActivityIndicatorVisible`. 19 | public var isNetworkActivityIndicatorVisible: Binder { 20 | return Binder(self.base) { application, active in 21 | application.isNetworkActivityIndicatorVisible = active 22 | } 23 | } 24 | } 25 | #endif 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIDatePicker+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIDatePicker+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Daniel Tartaglia on 5/31/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension Reactive where Base: UIDatePicker { 17 | /// Reactive wrapper for `date` property. 18 | public var date: ControlProperty { 19 | return value 20 | } 21 | 22 | /// Reactive wrapper for `date` property. 23 | public var value: ControlProperty { 24 | return base.rx.controlPropertyWithDefaultEvents( 25 | getter: { datePicker in 26 | datePicker.date 27 | }, setter: { datePicker, value in 28 | datePicker.date = value 29 | } 30 | ) 31 | } 32 | 33 | /// Reactive wrapper for `countDownDuration` property. 34 | public var countDownDuration: ControlProperty { 35 | return base.rx.controlPropertyWithDefaultEvents( 36 | getter: { datePicker in 37 | datePicker.countDownDuration 38 | }, setter: { datePicker, value in 39 | datePicker.countDownDuration = value 40 | } 41 | ) 42 | } 43 | } 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIImageView+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 4/1/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension Reactive where Base: UIImageView { 17 | 18 | /// Bindable sink for `image` property. 19 | public var image: Binder { 20 | return Binder(base) { imageView, image in 21 | imageView.image = image 22 | } 23 | } 24 | } 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UILabel+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UILabel+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 4/1/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension Reactive where Base: UILabel { 17 | 18 | /// Bindable sink for `text` property. 19 | public var text: Binder { 20 | return Binder(self.base) { label, text in 21 | label.text = text 22 | } 23 | } 24 | 25 | /// Bindable sink for `attributedText` property. 26 | public var attributedText: Binder { 27 | return Binder(self.base) { label, text in 28 | label.attributedText = text 29 | } 30 | } 31 | 32 | } 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UINavigationItem+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UINavigationItem+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by kumapo on 2016/05/09. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UINavigationItem { 17 | 18 | /// Bindable sink for `title` property. 19 | public var title: Binder { 20 | return Binder(self.base) { navigationItem, text in 21 | navigationItem.title = text 22 | } 23 | } 24 | 25 | } 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIPageControl+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIPageControl+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Francesco Puntillo on 14/04/2016. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension Reactive where Base: UIPageControl { 17 | 18 | /// Bindable sink for `currentPage` property. 19 | public var currentPage: Binder { 20 | return Binder(self.base) { controller, page in 21 | controller.currentPage = page 22 | } 23 | } 24 | 25 | /// Bindable sink for `numberOfPages` property. 26 | public var numberOfPages: Binder { 27 | return Binder(self.base) { controller, page in 28 | controller.numberOfPages = page 29 | } 30 | } 31 | 32 | } 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIProgressView+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIProgressView+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Samuel Bae on 2/27/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension Reactive where Base: UIProgressView { 17 | 18 | /// Bindable sink for `progress` property 19 | public var progress: Binder { 20 | return Binder(self.base) { progressView, progress in 21 | progressView.progress = progress 22 | } 23 | } 24 | 25 | } 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIRefreshControl+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIRefreshControl+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Yosuke Ishikawa on 1/31/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UIRefreshControl { 17 | /// Bindable sink for `beginRefreshing()`, `endRefreshing()` methods. 18 | public var isRefreshing: Binder { 19 | return Binder(self.base) { refreshControl, refresh in 20 | if refresh { 21 | refreshControl.beginRefreshing() 22 | } else { 23 | refreshControl.endRefreshing() 24 | } 25 | } 26 | } 27 | 28 | } 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UISegmentedControl+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISegmentedControl+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Carlos García on 8/7/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | 17 | extension Reactive where Base: UISegmentedControl { 18 | /// Reactive wrapper for `selectedSegmentIndex` property. 19 | public var selectedSegmentIndex: ControlProperty { 20 | return value 21 | } 22 | 23 | /// Reactive wrapper for `selectedSegmentIndex` property. 24 | public var value: ControlProperty { 25 | return base.rx.controlPropertyWithDefaultEvents( 26 | getter: { segmentedControl in 27 | segmentedControl.selectedSegmentIndex 28 | }, setter: { segmentedControl, value in 29 | segmentedControl.selectedSegmentIndex = value 30 | } 31 | ) 32 | } 33 | 34 | } 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UISlider+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISlider+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Alexander van der Werff on 28/05/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | #if !RX_NO_MODULE 12 | import RxSwift 13 | #endif 14 | import UIKit 15 | 16 | extension Reactive where Base: UISlider { 17 | 18 | /// Reactive wrapper for `value` property. 19 | public var value: ControlProperty { 20 | return base.rx.controlPropertyWithDefaultEvents( 21 | getter: { slider in 22 | slider.value 23 | }, setter: { slider, value in 24 | slider.value = value 25 | } 26 | ) 27 | } 28 | 29 | } 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIStepper+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIStepper+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Yuta ToKoRo on 9/1/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UIStepper { 17 | 18 | /// Reactive wrapper for `value` property. 19 | public var value: ControlProperty { 20 | return base.rx.controlPropertyWithDefaultEvents( 21 | getter: { stepper in 22 | stepper.value 23 | }, setter: { stepper, value in 24 | stepper.value = value 25 | } 26 | ) 27 | } 28 | 29 | } 30 | 31 | #endif 32 | 33 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UISwitch+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISwitch+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Carlos García on 8/7/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | 17 | extension Reactive where Base: UISwitch { 18 | 19 | /// Reactive wrapper for `isOn` property. 20 | public var isOn: ControlProperty { 21 | return value 22 | } 23 | 24 | /** 25 | Reactive wrapper for `isOn` property. 26 | 27 | **⚠️ Versions prior to iOS 10.2 were leaking `UISwitch`s, so on those versions 28 | underlying observable sequence won't complete when nothing holds a strong reference 29 | to UISwitch.⚠️** 30 | */ 31 | public var value: ControlProperty { 32 | return base.rx.controlPropertyWithDefaultEvents( 33 | getter: { uiSwitch in 34 | uiSwitch.isOn 35 | }, setter: { uiSwitch, value in 36 | uiSwitch.isOn = value 37 | } 38 | ) 39 | } 40 | 41 | } 42 | 43 | #endif 44 | 45 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UITabBarItem+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITabBarItem+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Mateusz Derks on 04/03/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UITabBarItem { 17 | 18 | /// Bindable sink for `badgeValue` property. 19 | public var badgeValue: Binder { 20 | return Binder(self.base) { tabBarItem, badgeValue in 21 | tabBarItem.badgeValue = badgeValue 22 | } 23 | } 24 | 25 | } 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIView+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Krunoslav Zaher on 12/6/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UIView { 17 | /// Bindable sink for `hidden` property. 18 | public var isHidden: Binder { 19 | return Binder(self.base) { view, hidden in 20 | view.isHidden = hidden 21 | } 22 | } 23 | 24 | /// Bindable sink for `alpha` property. 25 | public var alpha: Binder { 26 | return Binder(self.base) { view, alpha in 27 | view.alpha = alpha 28 | } 29 | } 30 | 31 | /// Bindable sink for `isUserInteractionEnabled` property. 32 | public var isUserInteractionEnabled: Binder { 33 | return Binder(self.base) { view, userInteractionEnabled in 34 | view.isUserInteractionEnabled = userInteractionEnabled 35 | } 36 | } 37 | 38 | } 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIViewController+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Kyle Fuller on 27/05/2016. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | import UIKit 11 | 12 | #if !RX_NO_MODULE 13 | import RxSwift 14 | #endif 15 | 16 | extension Reactive where Base: UIViewController { 17 | 18 | /// Bindable sink for `title`. 19 | public var title: Binder { 20 | return Binder(self.base) { viewController, title in 21 | viewController.title = title 22 | } 23 | } 24 | 25 | } 26 | #endif 27 | -------------------------------------------------------------------------------- /Example/Pods/RxCocoa/RxCocoa/iOS/UIWebView+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIWebView+Rx.swift 3 | // RxCocoa 4 | // 5 | // Created by Andrew Breckenridge on 8/30/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | 11 | import UIKit 12 | 13 | #if !RX_NO_MODULE 14 | import RxSwift 15 | #endif 16 | 17 | extension Reactive where Base: UIWebView { 18 | 19 | /// Reactive wrapper for `delegate`. 20 | /// For more information take a look at `DelegateProxyType` protocol documentation. 21 | public var delegate: DelegateProxy { 22 | return RxWebViewDelegateProxy.proxy(for: base) 23 | } 24 | 25 | /// Reactive wrapper for `delegate` message. 26 | public var didStartLoad: Observable { 27 | return delegate 28 | .methodInvoked(#selector(UIWebViewDelegate.webViewDidStartLoad(_:))) 29 | .map {_ in} 30 | } 31 | 32 | /// Reactive wrapper for `delegate` message. 33 | public var didFinishLoad: Observable { 34 | return delegate 35 | .methodInvoked(#selector(UIWebViewDelegate.webViewDidFinishLoad(_:))) 36 | .map {_ in} 37 | } 38 | 39 | /// Reactive wrapper for `delegate` message. 40 | public var didFailLoad: Observable { 41 | return delegate 42 | .methodInvoked(#selector(UIWebViewDelegate.webView(_:didFailLoadWithError:))) 43 | .map { a in 44 | return try castOrThrow(Error.self, a[1]) 45 | } 46 | } 47 | } 48 | 49 | #endif 50 | -------------------------------------------------------------------------------- /Example/Pods/RxGesture/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) RxSwiftCommunity 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/Pods/RxKeyboard/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Suyeol Jeon (xoul.kr) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/LICENSE.md: -------------------------------------------------------------------------------- 1 | **The MIT License** 2 | **Copyright © 2015 Krunoslav Zaher** 3 | **All rights reserved.** 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Example/Pods/RxSwift/Platform/DataStructures/InfiniteSequence.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InfiniteSequence.swift 3 | // Platform 4 | // 5 | // Created by Krunoslav Zaher on 6/13/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Sequence that repeats `repeatedValue` infinite number of times. 10 | struct InfiniteSequence : Sequence { 11 | typealias Element = E 12 | typealias Iterator = AnyIterator 13 | 14 | private let _repeatedValue: E 15 | 16 | init(repeatedValue: E) { 17 | _repeatedValue = repeatedValue 18 | } 19 | 20 | func makeIterator() -> Iterator { 21 | let repeatedValue = _repeatedValue 22 | return AnyIterator { 23 | return repeatedValue 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/Platform/DispatchQueue+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchQueue+Extensions.swift 3 | // Platform 4 | // 5 | // Created by Krunoslav Zaher on 10/22/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import Dispatch 10 | 11 | extension DispatchQueue { 12 | private static var token: DispatchSpecificKey<()> = { 13 | let key = DispatchSpecificKey<()>() 14 | DispatchQueue.main.setSpecific(key: key, value: ()) 15 | return key 16 | }() 17 | 18 | static var isMain: Bool { 19 | return DispatchQueue.getSpecific(key: token) != nil 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/Platform/RecursiveLock.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecursiveLock.swift 3 | // Platform 4 | // 5 | // Created by Krunoslav Zaher on 12/18/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import class Foundation.NSRecursiveLock 10 | 11 | #if TRACE_RESOURCES 12 | class RecursiveLock: NSRecursiveLock { 13 | override init() { 14 | _ = Resources.incrementTotal() 15 | super.init() 16 | } 17 | 18 | override func lock() { 19 | super.lock() 20 | _ = Resources.incrementTotal() 21 | } 22 | 23 | override func unlock() { 24 | super.unlock() 25 | _ = Resources.decrementTotal() 26 | } 27 | 28 | deinit { 29 | _ = Resources.decrementTotal() 30 | } 31 | } 32 | #else 33 | typealias RecursiveLock = NSRecursiveLock 34 | #endif 35 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Cancelable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Cancelable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/12/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents disposable resource with state tracking. 10 | public protocol Cancelable : Disposable { 11 | /// Was resource disposed. 12 | var isDisposed: Bool { get } 13 | } 14 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Concurrency/Lock.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Lock.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/31/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol Lock { 10 | func lock() 11 | func unlock() 12 | } 13 | 14 | // https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html 15 | typealias SpinLock = RecursiveLock 16 | 17 | extension RecursiveLock : Lock { 18 | @inline(__always) 19 | final func performLocked(_ action: () -> Void) { 20 | lock(); defer { unlock() } 21 | action() 22 | } 23 | 24 | @inline(__always) 25 | final func calculateLocked(_ action: () -> T) -> T { 26 | lock(); defer { unlock() } 27 | return action() 28 | } 29 | 30 | @inline(__always) 31 | final func calculateLockedOrFail(_ action: () throws -> T) throws -> T { 32 | lock(); defer { unlock() } 33 | let result = try action() 34 | return result 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Concurrency/LockOwnerType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LockOwnerType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 10/25/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol LockOwnerType : class, Lock { 10 | var _lock: RecursiveLock { get } 11 | } 12 | 13 | extension LockOwnerType { 14 | func lock() { 15 | _lock.lock() 16 | } 17 | 18 | func unlock() { 19 | _lock.unlock() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Concurrency/SynchronizedDisposeType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SynchronizedDisposeType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 10/25/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol SynchronizedDisposeType : class, Disposable, Lock { 10 | func _synchronized_dispose() 11 | } 12 | 13 | extension SynchronizedDisposeType { 14 | func synchronizedDispose() { 15 | lock(); defer { unlock() } 16 | _synchronized_dispose() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Concurrency/SynchronizedOnType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SynchronizedOnType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 10/25/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol SynchronizedOnType : class, ObserverType, Lock { 10 | func _synchronized_on(_ event: Event) 11 | } 12 | 13 | extension SynchronizedOnType { 14 | func synchronizedOn(_ event: Event) { 15 | lock(); defer { unlock() } 16 | _synchronized_on(event) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Concurrency/SynchronizedUnsubscribeType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SynchronizedUnsubscribeType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 10/25/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol SynchronizedUnsubscribeType : class { 10 | associatedtype DisposeKey 11 | 12 | func synchronizedUnsubscribe(_ disposeKey: DisposeKey) 13 | } 14 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/ConnectableObservableType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConnectableObservableType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/1/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /** 10 | Represents an observable sequence wrapper that can be connected and disconnected from its underlying observable sequence. 11 | */ 12 | public protocol ConnectableObservableType : ObservableType { 13 | /** 14 | Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established. 15 | 16 | - returns: Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. 17 | */ 18 | func connect() -> Disposable 19 | } 20 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Disposable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 2/8/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Respresents a disposable resource. 10 | public protocol Disposable { 11 | /// Dispose resource. 12 | func dispose() 13 | } 14 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/BinaryDisposable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BinaryDisposable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 6/12/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents two disposable resources that are disposed together. 10 | private final class BinaryDisposable : DisposeBase, Cancelable { 11 | 12 | private var _isDisposed: AtomicInt = 0 13 | 14 | // state 15 | private var _disposable1: Disposable? 16 | private var _disposable2: Disposable? 17 | 18 | /// - returns: Was resource disposed. 19 | var isDisposed: Bool { 20 | return _isDisposed > 0 21 | } 22 | 23 | /// Constructs new binary disposable from two disposables. 24 | /// 25 | /// - parameter disposable1: First disposable 26 | /// - parameter disposable2: Second disposable 27 | init(_ disposable1: Disposable, _ disposable2: Disposable) { 28 | _disposable1 = disposable1 29 | _disposable2 = disposable2 30 | super.init() 31 | } 32 | 33 | /// Calls the disposal action if and only if the current instance hasn't been disposed yet. 34 | /// 35 | /// After invoking disposal action, disposal action will be dereferenced. 36 | func dispose() { 37 | if AtomicCompareAndSwap(0, 1, &_isDisposed) { 38 | _disposable1?.dispose() 39 | _disposable2?.dispose() 40 | _disposable1 = nil 41 | _disposable2 = nil 42 | } 43 | } 44 | } 45 | 46 | extension Disposables { 47 | 48 | /// Creates a disposable with the given disposables. 49 | public static func create(_ disposable1: Disposable, _ disposable2: Disposable) -> Cancelable { 50 | return BinaryDisposable(disposable1, disposable2) 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/BooleanDisposable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BooleanDisposable.swift 3 | // RxSwift 4 | // 5 | // Created by Junior B. on 10/29/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents a disposable resource that can be checked for disposal status. 10 | public final class BooleanDisposable : Cancelable { 11 | 12 | internal static let BooleanDisposableTrue = BooleanDisposable(isDisposed: true) 13 | private var _isDisposed = false 14 | 15 | /// Initializes a new instance of the `BooleanDisposable` class 16 | public init() { 17 | } 18 | 19 | /// Initializes a new instance of the `BooleanDisposable` class with given value 20 | public init(isDisposed: Bool) { 21 | self._isDisposed = isDisposed 22 | } 23 | 24 | /// - returns: Was resource disposed. 25 | public var isDisposed: Bool { 26 | return _isDisposed 27 | } 28 | 29 | /// Sets the status to disposed, which can be observer through the `isDisposed` property. 30 | public func dispose() { 31 | _isDisposed = true 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/Disposables.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Disposables.swift 3 | // RxSwift 4 | // 5 | // Created by Mohsen Ramezanpoor on 01/08/2016. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// A collection of utility methods for common disposable operations. 10 | public struct Disposables { 11 | private init() {} 12 | } 13 | 14 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/DisposeBase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DisposeBase.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 4/4/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Base class for all disposables. 10 | public class DisposeBase { 11 | init() { 12 | #if TRACE_RESOURCES 13 | let _ = Resources.incrementTotal() 14 | #endif 15 | } 16 | 17 | deinit { 18 | #if TRACE_RESOURCES 19 | let _ = Resources.decrementTotal() 20 | #endif 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/NopDisposable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NopDisposable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 2/15/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents a disposable that does nothing on disposal. 10 | /// 11 | /// Nop = No Operation 12 | fileprivate struct NopDisposable : Disposable { 13 | 14 | fileprivate static let noOp: Disposable = NopDisposable() 15 | 16 | fileprivate init() { 17 | 18 | } 19 | 20 | /// Does nothing. 21 | public func dispose() { 22 | } 23 | } 24 | 25 | extension Disposables { 26 | /** 27 | Creates a disposable that does nothing on disposal. 28 | */ 29 | static public func create() -> Disposable { 30 | return NopDisposable.noOp 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/ScheduledDisposable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduledDisposable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 6/13/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | private let disposeScheduledDisposable: (ScheduledDisposable) -> Disposable = { sd in 10 | sd.disposeInner() 11 | return Disposables.create() 12 | } 13 | 14 | /// Represents a disposable resource whose disposal invocation will be scheduled on the specified scheduler. 15 | public final class ScheduledDisposable : Cancelable { 16 | public let scheduler: ImmediateSchedulerType 17 | 18 | private var _isDisposed: AtomicInt = 0 19 | 20 | // state 21 | private var _disposable: Disposable? 22 | 23 | /// - returns: Was resource disposed. 24 | public var isDisposed: Bool { 25 | return _isDisposed == 1 26 | } 27 | 28 | /** 29 | Initializes a new instance of the `ScheduledDisposable` that uses a `scheduler` on which to dispose the `disposable`. 30 | 31 | - parameter scheduler: Scheduler where the disposable resource will be disposed on. 32 | - parameter disposable: Disposable resource to dispose on the given scheduler. 33 | */ 34 | public init(scheduler: ImmediateSchedulerType, disposable: Disposable) { 35 | self.scheduler = scheduler 36 | _disposable = disposable 37 | } 38 | 39 | /// Disposes the wrapped disposable on the provided scheduler. 40 | public func dispose() { 41 | let _ = scheduler.schedule(self, action: disposeScheduledDisposable) 42 | } 43 | 44 | func disposeInner() { 45 | if AtomicCompareAndSwap(0, 1, &_isDisposed) { 46 | _disposable!.dispose() 47 | _disposable = nil 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Disposables/SubscriptionDisposable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SubscriptionDisposable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 10/25/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | struct SubscriptionDisposable : Disposable { 10 | private let _key: T.DisposeKey 11 | private weak var _owner: T? 12 | 13 | init(owner: T, key: T.DisposeKey) { 14 | _owner = owner 15 | _key = key 16 | } 17 | 18 | func dispose() { 19 | _owner?.synchronizedUnsubscribe(_key) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Errors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Errors.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/28/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | let RxErrorDomain = "RxErrorDomain" 10 | let RxCompositeFailures = "RxCompositeFailures" 11 | 12 | /// Generic Rx error codes. 13 | public enum RxError 14 | : Swift.Error 15 | , CustomDebugStringConvertible { 16 | /// Unknown error occurred. 17 | case unknown 18 | /// Performing an action on disposed object. 19 | case disposed(object: AnyObject) 20 | /// Aritmetic overflow error. 21 | case overflow 22 | /// Argument out of range error. 23 | case argumentOutOfRange 24 | /// Sequence doesn't contain any elements. 25 | case noElements 26 | /// Sequence contains more than one element. 27 | case moreThanOneElement 28 | /// Timeout error. 29 | case timeout 30 | } 31 | 32 | extension RxError { 33 | /// A textual representation of `self`, suitable for debugging. 34 | public var debugDescription: String { 35 | switch self { 36 | case .unknown: 37 | return "Unknown error occurred." 38 | case .disposed(let object): 39 | return "Object `\(object)` was already disposed." 40 | case .overflow: 41 | return "Arithmetic overflow occurred." 42 | case .argumentOutOfRange: 43 | return "Argument out of range." 44 | case .noElements: 45 | return "Sequence doesn't contain any elements." 46 | case .moreThanOneElement: 47 | return "Sequence contains more than one element." 48 | case .timeout: 49 | return "Sequence timeout." 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Extensions/Bag+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bag+Rx.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 10/19/16. 6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | 10 | // MARK: forEach 11 | 12 | @inline(__always) 13 | func dispatch(_ bag: Bag<(Event) -> ()>, _ event: Event) { 14 | if bag._onlyFastPath { 15 | bag._value0?(event) 16 | return 17 | } 18 | 19 | let value0 = bag._value0 20 | let dictionary = bag._dictionary 21 | 22 | if let value0 = value0 { 23 | value0(event) 24 | } 25 | 26 | let pairs = bag._pairs 27 | for i in 0 ..< pairs.count { 28 | pairs[i].value(event) 29 | } 30 | 31 | if let dictionary = dictionary { 32 | for element in dictionary.values { 33 | element(event) 34 | } 35 | } 36 | } 37 | 38 | /// Dispatches `dispose` to all disposables contained inside bag. 39 | func disposeAll(in bag: Bag) { 40 | if bag._onlyFastPath { 41 | bag._value0?.dispose() 42 | return 43 | } 44 | 45 | let value0 = bag._value0 46 | let dictionary = bag._dictionary 47 | 48 | if let value0 = value0 { 49 | value0.dispose() 50 | } 51 | 52 | let pairs = bag._pairs 53 | for i in 0 ..< pairs.count { 54 | pairs[i].value.dispose() 55 | } 56 | 57 | if let dictionary = dictionary { 58 | for element in dictionary.values { 59 | element.dispose() 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Extensions/String+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Rx.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 12/25/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension String { 10 | /// This is needed because on Linux Swift doesn't have `rangeOfString(..., options: .BackwardsSearch)` 11 | func lastIndexOf(_ character: Character) -> Index? { 12 | var index = endIndex 13 | while index > startIndex { 14 | index = self.index(before: index) 15 | if self[index] == character { 16 | return index 17 | } 18 | } 19 | 20 | return nil 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/GroupedObservable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GroupedObservable.swift 3 | // RxSwift 4 | // 5 | // Created by Tomi Koskinen on 01/12/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents an observable sequence of elements that have a common key. 10 | public struct GroupedObservable : ObservableType { 11 | public typealias E = Element 12 | 13 | /// Gets the common key. 14 | public let key: Key 15 | 16 | private let source: Observable 17 | 18 | /// Initializes grouped observable sequence with key and source observable sequence. 19 | /// 20 | /// - parameter key: Grouped observable sequence key 21 | /// - parameter source: Observable sequence that represents sequence of elements for the key 22 | /// - returns: Grouped observable sequence of elements for the specific key 23 | public init(key: Key, source: Observable) { 24 | self.key = key 25 | self.source = source 26 | } 27 | 28 | /// Subscribes `observer` to receive events for this sequence. 29 | public func subscribe(_ observer: O) -> Disposable where O.E == E { 30 | return self.source.subscribe(observer) 31 | } 32 | 33 | /// Converts `self` to `Observable` sequence. 34 | public func asObservable() -> Observable { 35 | return source 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/ImmediateSchedulerType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImmediateSchedulerType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 5/31/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents an object that immediately schedules units of work. 10 | public protocol ImmediateSchedulerType { 11 | /** 12 | Schedules an action to be executed immediately. 13 | 14 | - parameter state: State passed to the action to be executed. 15 | - parameter action: Action to be executed. 16 | - returns: The disposable object used to cancel the scheduled action (best effort). 17 | */ 18 | func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable 19 | } 20 | 21 | extension ImmediateSchedulerType { 22 | /** 23 | Schedules an action to be executed recursively. 24 | 25 | - parameter state: State passed to the action to be executed. 26 | - parameter action: Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. 27 | - returns: The disposable object used to cancel the scheduled action (best effort). 28 | */ 29 | public func scheduleRecursive(_ state: State, action: @escaping (_ state: State, _ recurse: (State) -> ()) -> ()) -> Disposable { 30 | let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self) 31 | 32 | recursiveScheduler.schedule(state) 33 | 34 | return Disposables.create(with: recursiveScheduler.dispose) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Observable.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 2/8/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// A type-erased `ObservableType`. 10 | /// 11 | /// It represents a push style sequence. 12 | public class Observable : ObservableType { 13 | /// Type of elements in sequence. 14 | public typealias E = Element 15 | 16 | init() { 17 | #if TRACE_RESOURCES 18 | let _ = Resources.incrementTotal() 19 | #endif 20 | } 21 | 22 | public func subscribe(_ observer: O) -> Disposable where O.E == E { 23 | rxAbstractMethod() 24 | } 25 | 26 | public func asObservable() -> Observable { 27 | return self 28 | } 29 | 30 | deinit { 31 | #if TRACE_RESOURCES 32 | let _ = Resources.decrementTotal() 33 | #endif 34 | } 35 | 36 | // this is kind of ugly I know :( 37 | // Swift compiler reports "Not supported yet" when trying to override protocol extensions, so ¯\_(ツ)_/¯ 38 | 39 | /// Optimizations for map operator 40 | internal func composeMap(_ transform: @escaping (Element) throws -> R) -> Observable { 41 | return _map(source: self, transform: transform) 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/ObservableConvertibleType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ObservableConvertibleType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 9/17/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Type that can be converted to observable sequence (`Observable`). 10 | public protocol ObservableConvertibleType { 11 | /// Type of elements in sequence. 12 | associatedtype E 13 | 14 | /// Converts `self` to `Observable` sequence. 15 | /// 16 | /// - returns: Observable sequence that represents `self`. 17 | func asObservable() -> Observable 18 | } 19 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/AddRef.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AddRef.swift 3 | // RxSwift 4 | // 5 | // Created by Junior B. on 30/10/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | final class AddRefSink : Sink, ObserverType { 10 | typealias Element = O.E 11 | 12 | override init(observer: O, cancel: Cancelable) { 13 | super.init(observer: observer, cancel: cancel) 14 | } 15 | 16 | func on(_ event: Event) { 17 | switch event { 18 | case .next(_): 19 | forwardOn(event) 20 | case .completed, .error(_): 21 | forwardOn(event) 22 | dispose() 23 | } 24 | } 25 | } 26 | 27 | final class AddRef : Producer { 28 | typealias EventHandler = (Event) throws -> Void 29 | 30 | private let _source: Observable 31 | private let _refCount: RefCountDisposable 32 | 33 | init(source: Observable, refCount: RefCountDisposable) { 34 | _source = source 35 | _refCount = refCount 36 | } 37 | 38 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element { 39 | let releaseDisposable = _refCount.retain() 40 | let sink = AddRefSink(observer: observer, cancel: cancel) 41 | let subscription = Disposables.create(releaseDisposable, _source.subscribe(sink)) 42 | 43 | return (sink: sink, subscription: subscription) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/AsMaybe.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AsMaybe.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/12/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | fileprivate final class AsMaybeSink : Sink, ObserverType { 10 | typealias ElementType = O.E 11 | typealias E = ElementType 12 | 13 | private var _element: Event? = nil 14 | 15 | func on(_ event: Event) { 16 | switch event { 17 | case .next: 18 | if _element != nil { 19 | forwardOn(.error(RxError.moreThanOneElement)) 20 | dispose() 21 | } 22 | 23 | _element = event 24 | case .error: 25 | forwardOn(event) 26 | dispose() 27 | case .completed: 28 | if let element = _element { 29 | forwardOn(element) 30 | } 31 | forwardOn(.completed) 32 | dispose() 33 | } 34 | } 35 | } 36 | 37 | final class AsMaybe: Producer { 38 | fileprivate let _source: Observable 39 | 40 | init(source: Observable) { 41 | _source = source 42 | } 43 | 44 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element { 45 | let sink = AsMaybeSink(observer: observer, cancel: cancel) 46 | let subscription = _source.subscribe(sink) 47 | return (sink: sink, subscription: subscription) 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/AsSingle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AsSingle.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/12/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | fileprivate final class AsSingleSink : Sink, ObserverType { 10 | typealias ElementType = O.E 11 | typealias E = ElementType 12 | 13 | private var _element: Event? = nil 14 | 15 | func on(_ event: Event) { 16 | switch event { 17 | case .next: 18 | if _element != nil { 19 | forwardOn(.error(RxError.moreThanOneElement)) 20 | dispose() 21 | } 22 | 23 | _element = event 24 | case .error: 25 | forwardOn(event) 26 | dispose() 27 | case .completed: 28 | if let element = _element { 29 | forwardOn(element) 30 | forwardOn(.completed) 31 | } 32 | else { 33 | forwardOn(.error(RxError.noElements)) 34 | } 35 | dispose() 36 | } 37 | } 38 | } 39 | 40 | final class AsSingle: Producer { 41 | fileprivate let _source: Observable 42 | 43 | init(source: Observable) { 44 | _source = source 45 | } 46 | 47 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element { 48 | let sink = AsSingleSink(observer: observer, cancel: cancel) 49 | let subscription = _source.subscribe(sink) 50 | return (sink: sink, subscription: subscription) 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/Empty.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Empty.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 8/30/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension ObservableType { 10 | /** 11 | Returns an empty observable sequence, using the specified scheduler to send out the single `Completed` message. 12 | 13 | - seealso: [empty operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html) 14 | 15 | - returns: An observable sequence with no elements. 16 | */ 17 | public static func empty() -> Observable { 18 | return EmptyProducer() 19 | } 20 | } 21 | 22 | final fileprivate class EmptyProducer : Producer { 23 | override func subscribe(_ observer: O) -> Disposable where O.E == Element { 24 | observer.on(.completed) 25 | return Disposables.create() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/Error.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Error.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 8/30/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension ObservableType { 10 | /** 11 | Returns an observable sequence that terminates with an `error`. 12 | 13 | - seealso: [throw operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html) 14 | 15 | - returns: The observable sequence that terminates with specified error. 16 | */ 17 | public static func error(_ error: Swift.Error) -> Observable { 18 | return ErrorProducer(error: error) 19 | } 20 | } 21 | 22 | final fileprivate class ErrorProducer : Producer { 23 | private let _error: Swift.Error 24 | 25 | init(error: Swift.Error) { 26 | _error = error 27 | } 28 | 29 | override func subscribe(_ observer: O) -> Disposable where O.E == Element { 30 | observer.on(.error(_error)) 31 | return Disposables.create() 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/First.swift: -------------------------------------------------------------------------------- 1 | // 2 | // First.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 7/31/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | fileprivate final class FirstSink : Sink, ObserverType where O.E == Element? { 10 | typealias E = Element 11 | typealias Parent = First 12 | 13 | func on(_ event: Event) { 14 | switch event { 15 | case .next(let value): 16 | forwardOn(.next(value)) 17 | forwardOn(.completed) 18 | dispose() 19 | case .error(let error): 20 | forwardOn(.error(error)) 21 | dispose() 22 | case .completed: 23 | forwardOn(.next(nil)) 24 | forwardOn(.completed) 25 | dispose() 26 | } 27 | } 28 | } 29 | 30 | final class First: Producer { 31 | fileprivate let _source: Observable 32 | 33 | init(source: Observable) { 34 | _source = source 35 | } 36 | 37 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element? { 38 | let sink = FirstSink(observer: observer, cancel: cancel) 39 | let subscription = _source.subscribe(sink) 40 | return (sink: sink, subscription: subscription) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/Materialize.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Materialize.swift 3 | // RxSwift 4 | // 5 | // Created by sergdort on 08/03/2017. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension ObservableType { 10 | /** 11 | Convert any Observable into an Observable of its events. 12 | - seealso: [materialize operator on reactivex.io](http://reactivex.io/documentation/operators/materialize-dematerialize.html) 13 | - returns: An observable sequence that wraps events in an Event. The returned Observable never errors, but it does complete after observing all of the events of the underlying Observable. 14 | */ 15 | public func materialize() -> Observable> { 16 | return Materialize(source: self.asObservable()) 17 | } 18 | } 19 | 20 | fileprivate final class MaterializeSink: Sink, ObserverType where O.E == Event { 21 | 22 | func on(_ event: Event) { 23 | forwardOn(.next(event)) 24 | if event.isStopEvent { 25 | forwardOn(.completed) 26 | dispose() 27 | } 28 | } 29 | } 30 | 31 | final fileprivate class Materialize: Producer> { 32 | private let _source: Observable 33 | 34 | init(source: Observable) { 35 | _source = source 36 | } 37 | 38 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == E { 39 | let sink = MaterializeSink(observer: observer, cancel: cancel) 40 | let subscription = _source.subscribe(sink) 41 | 42 | return (sink: sink, subscription: subscription) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/Never.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Never.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 8/30/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension ObservableType { 10 | 11 | /** 12 | Returns a non-terminating observable sequence, which can be used to denote an infinite duration. 13 | 14 | - seealso: [never operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html) 15 | 16 | - returns: An observable sequence whose observers will never get called. 17 | */ 18 | public static func never() -> Observable { 19 | return NeverProducer() 20 | } 21 | } 22 | 23 | final fileprivate class NeverProducer : Producer { 24 | override func subscribe(_ observer: O) -> Disposable where O.E == Element { 25 | return Disposables.create() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observables/StartWith.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StartWith.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 4/6/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension ObservableType { 10 | 11 | /** 12 | Prepends a sequence of values to an observable sequence. 13 | 14 | - seealso: [startWith operator on reactivex.io](http://reactivex.io/documentation/operators/startwith.html) 15 | 16 | - parameter elements: Elements to prepend to the specified sequence. 17 | - returns: The source sequence prepended with the specified values. 18 | */ 19 | public func startWith(_ elements: E ...) 20 | -> Observable { 21 | return StartWith(source: self.asObservable(), elements: elements) 22 | } 23 | } 24 | 25 | final fileprivate class StartWith: Producer { 26 | let elements: [Element] 27 | let source: Observable 28 | 29 | init(source: Observable, elements: [Element]) { 30 | self.source = source 31 | self.elements = elements 32 | super.init() 33 | } 34 | 35 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element { 36 | for e in elements { 37 | observer.on(.next(e)) 38 | } 39 | 40 | return (sink: Disposables.create(), subscription: source.subscribe(observer)) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/ObserverType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ObserverType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 2/8/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Supports push-style iteration over an observable sequence. 10 | public protocol ObserverType { 11 | /// The type of elements in sequence that observer can observe. 12 | associatedtype E 13 | 14 | /// Notify observer about sequence event. 15 | /// 16 | /// - parameter event: Event that occurred. 17 | func on(_ event: Event) 18 | } 19 | 20 | /// Convenience API extensions to provide alternate next, error, completed events 21 | extension ObserverType { 22 | 23 | /// Convenience method equivalent to `on(.next(element: E))` 24 | /// 25 | /// - parameter element: Next element to send to observer(s) 26 | public func onNext(_ element: E) { 27 | on(.next(element)) 28 | } 29 | 30 | /// Convenience method equivalent to `on(.completed)` 31 | public func onCompleted() { 32 | on(.completed) 33 | } 34 | 35 | /// Convenience method equivalent to `on(.error(Swift.Error))` 36 | /// - parameter error: Swift.Error to send to observer(s) 37 | public func onError(_ error: Swift.Error) { 38 | on(.error(error)) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observers/AnonymousObserver.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnonymousObserver.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 2/8/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | final class AnonymousObserver : ObserverBase { 10 | typealias Element = ElementType 11 | 12 | typealias EventHandler = (Event) -> Void 13 | 14 | private let _eventHandler : EventHandler 15 | 16 | init(_ eventHandler: @escaping EventHandler) { 17 | #if TRACE_RESOURCES 18 | let _ = Resources.incrementTotal() 19 | #endif 20 | _eventHandler = eventHandler 21 | } 22 | 23 | override func onCore(_ event: Event) { 24 | return _eventHandler(event) 25 | } 26 | 27 | #if TRACE_RESOURCES 28 | deinit { 29 | let _ = Resources.decrementTotal() 30 | } 31 | #endif 32 | } 33 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Observers/ObserverBase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ObserverBase.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 2/15/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | class ObserverBase : Disposable, ObserverType { 10 | typealias E = ElementType 11 | 12 | private var _isStopped: AtomicInt = 0 13 | 14 | func on(_ event: Event) { 15 | switch event { 16 | case .next: 17 | if _isStopped == 0 { 18 | onCore(event) 19 | } 20 | case .error, .completed: 21 | if AtomicCompareAndSwap(0, 1, &_isStopped) { 22 | onCore(event) 23 | } 24 | } 25 | } 26 | 27 | func onCore(_ event: Event) { 28 | rxAbstractMethod() 29 | } 30 | 31 | func dispose() { 32 | _ = AtomicCompareAndSwap(0, 1, &_isStopped) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/RxMutableBox.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RxMutableBox.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 5/22/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Creates mutable reference wrapper for any type. 10 | final class RxMutableBox : CustomDebugStringConvertible { 11 | /// Wrapped value 12 | var value : T 13 | 14 | /// Creates reference wrapper for `value`. 15 | /// 16 | /// - parameter value: Value to wrap. 17 | init (_ value: T) { 18 | self.value = value 19 | } 20 | } 21 | 22 | extension RxMutableBox { 23 | /// - returns: Box description. 24 | var debugDescription: String { 25 | return "MutatingBox(\(self.value))" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Schedulers/HistoricalScheduler.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HistoricalScheduler.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 12/27/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import struct Foundation.Date 10 | 11 | /// Provides a virtual time scheduler that uses `Date` for absolute time and `NSTimeInterval` for relative time. 12 | public class HistoricalScheduler : VirtualTimeScheduler { 13 | 14 | /** 15 | Creates a new historical scheduler with initial clock value. 16 | 17 | - parameter initialClock: Initial value for virtual clock. 18 | */ 19 | public init(initialClock: RxTime = Date(timeIntervalSince1970: 0)) { 20 | super.init(initialClock: initialClock, converter: HistoricalSchedulerTimeConverter()) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableScheduledItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InvocableScheduledItem.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 11/7/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | struct InvocableScheduledItem : InvocableType { 10 | 11 | let _invocable: I 12 | let _state: I.Value 13 | 14 | init(invocable: I, state: I.Value) { 15 | _invocable = invocable 16 | _state = state 17 | } 18 | 19 | func invoke() { 20 | _invocable.invoke(_state) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InvocableType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 11/7/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol InvocableType { 10 | func invoke() 11 | } 12 | 13 | protocol InvocableWithValueType { 14 | associatedtype Value 15 | 16 | func invoke(_ value: Value) 17 | } 18 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduledItem.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 9/2/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | struct ScheduledItem 10 | : ScheduledItemType 11 | , InvocableType { 12 | typealias Action = (T) -> Disposable 13 | 14 | private let _action: Action 15 | private let _state: T 16 | 17 | private let _disposable = SingleAssignmentDisposable() 18 | 19 | var isDisposed: Bool { 20 | return _disposable.isDisposed 21 | } 22 | 23 | init(action: @escaping Action, state: T) { 24 | _action = action 25 | _state = state 26 | } 27 | 28 | func invoke() { 29 | _disposable.setDisposable(_action(_state)) 30 | } 31 | 32 | func dispose() { 33 | _disposable.dispose() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItemType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduledItemType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 11/7/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | protocol ScheduledItemType 10 | : Cancelable 11 | , InvocableType { 12 | func invoke() 13 | } 14 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Subjects/SubjectType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SubjectType.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 3/1/15. 6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | /// Represents an object that is both an observable sequence as well as an observer. 10 | public protocol SubjectType : ObservableType { 11 | /// The type of the observer that represents this subject. 12 | /// 13 | /// Usually this type is type of subject itself, but it doesn't have to be. 14 | associatedtype SubjectObserverType : ObserverType 15 | 16 | /// Returns observer interface for subject. 17 | /// 18 | /// - returns: Observer interface for subject. 19 | func asObserver() -> SubjectObserverType 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/SwiftSupport/SwiftSupport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftSupport.swift 3 | // RxSwift 4 | // 5 | // Created by Volodymyr Gorbenko on 3/6/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | #if swift(>=4.0) 12 | typealias IntMax = Int64 13 | public typealias RxAbstractInteger = FixedWidthInteger 14 | 15 | extension SignedInteger { 16 | func toIntMax() -> IntMax { 17 | return IntMax(self) 18 | } 19 | } 20 | #else 21 | public typealias RxAbstractInteger = SignedInteger 22 | 23 | extension Array { 24 | public mutating func swapAt(_ i: Int, _ j: Int) { 25 | swap(&self[i], &self[j]) 26 | } 27 | } 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /Example/Pods/RxSwift/RxSwift/Traits/ObservableType+PrimitiveSequence.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ObservableType+PrimitiveSequence.swift 3 | // RxSwift 4 | // 5 | // Created by Krunoslav Zaher on 9/17/17. 6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved. 7 | // 8 | 9 | extension ObservableType { 10 | /** 11 | The `asSingle` operator throws a `RxError.noElements` or `RxError.moreThanOneElement` 12 | if the source Observable does not emit exactly one element before successfully completing. 13 | 14 | - seealso: [single operator on reactivex.io](http://reactivex.io/documentation/operators/first.html) 15 | 16 | - returns: An observable sequence that emits a single element or throws an exception if more (or none) of them are emitted. 17 | */ 18 | public func asSingle() -> Single { 19 | return PrimitiveSequence(raw: AsSingle(source: self.asObservable())) 20 | } 21 | 22 | /** 23 | The `asMaybe` operator throws a ``RxError.moreThanOneElement` 24 | if the source Observable does not emit at most one element before successfully completing. 25 | 26 | - seealso: [single operator on reactivex.io](http://reactivex.io/documentation/operators/first.html) 27 | 28 | - returns: An observable sequence that emits a single element, completes or throws an exception if more of them are emitted. 29 | */ 30 | public func asMaybe() -> Maybe { 31 | return PrimitiveSequence(raw: AsMaybe(source: self.asObservable())) 32 | } 33 | } 34 | 35 | extension ObservableType where E == Never { 36 | /** 37 | - returns: An observable sequence that completes. 38 | */ 39 | public func asCompletable() 40 | -> Completable { 41 | return PrimitiveSequence(raw: self.asObservable()) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Alamofire/Alamofire.modulemap: -------------------------------------------------------------------------------- 1 | framework module Alamofire { 2 | umbrella header "Alamofire-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Alamofire/Alamofire.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Alamofire 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Alamofire/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.5.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kingfisher/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.3.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kingfisher/Kingfisher-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Kingfisher : NSObject 3 | @end 4 | @implementation PodsDummy_Kingfisher 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kingfisher/Kingfisher-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kingfisher/Kingfisher-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "Kingfisher.h" 14 | 15 | FOUNDATION_EXPORT double KingfisherVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char KingfisherVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kingfisher/Kingfisher.modulemap: -------------------------------------------------------------------------------- 1 | framework module Kingfisher { 2 | umbrella header "Kingfisher-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kingfisher/Kingfisher.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Kingfisher 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "CFNetwork" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Kingfisher 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | SWIFT_VERSION = 4.0 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Moya/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 10.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Moya/Moya-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Moya : NSObject 3 | @end 4 | @implementation PodsDummy_Moya 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Moya/Moya-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Moya/Moya-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double MoyaVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char MoyaVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Moya/Moya.modulemap: -------------------------------------------------------------------------------- 1 | framework module Moya { 2 | umbrella header "Moya-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Moya/Moya.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Moya 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Result" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 5 | OTHER_LDFLAGS = -framework "Foundation" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Moya 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Example/Pods-iOSEasyList_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_iOSEasyList_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_iOSEasyList_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Example/Pods-iOSEasyList_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_iOSEasyList_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_iOSEasyList_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Example/Pods-iOSEasyList_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_iOSEasyList_Example { 2 | umbrella header "Pods-iOSEasyList_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_iOSEasyList_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_iOSEasyList_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_iOSEasyList_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_iOSEasyList_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher" "$PODS_CONFIGURATION_BUILD_DIR/Moya" "$PODS_CONFIGURATION_BUILD_DIR/Result" "$PODS_CONFIGURATION_BUILD_DIR/RxCocoa" "$PODS_CONFIGURATION_BUILD_DIR/RxGesture" "$PODS_CONFIGURATION_BUILD_DIR/RxKeyboard" "$PODS_CONFIGURATION_BUILD_DIR/RxSwift" "$PODS_CONFIGURATION_BUILD_DIR/iOSEasyList" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher/Kingfisher.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Moya/Moya.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Result/Result.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxCocoa/RxCocoa.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxGesture/RxGesture.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxKeyboard/RxKeyboard.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxSwift/RxSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSEasyList/iOSEasyList.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_iOSEasyList_Tests { 2 | umbrella header "Pods-iOSEasyList_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-iOSEasyList_Tests/Pods-iOSEasyList_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher" "$PODS_CONFIGURATION_BUILD_DIR/Moya" "$PODS_CONFIGURATION_BUILD_DIR/Result" "$PODS_CONFIGURATION_BUILD_DIR/RxCocoa" "$PODS_CONFIGURATION_BUILD_DIR/RxGesture" "$PODS_CONFIGURATION_BUILD_DIR/RxKeyboard" "$PODS_CONFIGURATION_BUILD_DIR/RxSwift" "$PODS_CONFIGURATION_BUILD_DIR/iOSEasyList" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher/Kingfisher.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Moya/Moya.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Result/Result.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxCocoa/RxCocoa.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxGesture/RxGesture.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxKeyboard/RxKeyboard.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RxSwift/RxSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSEasyList/iOSEasyList.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Result/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.2.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Result/Result-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Result : NSObject 3 | @end 4 | @implementation PodsDummy_Result 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Result/Result-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Result/Result-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double ResultVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char ResultVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Result/Result.modulemap: -------------------------------------------------------------------------------- 1 | framework module Result { 2 | umbrella header "Result-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Result/Result.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Result 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Result 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxCocoa/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxCocoa/RxCocoa-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_RxCocoa : NSObject 3 | @end 4 | @implementation PodsDummy_RxCocoa 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxCocoa/RxCocoa-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxCocoa/RxCocoa-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "RxCocoa.h" 14 | #import "RxCocoaRuntime.h" 15 | #import "_RX.h" 16 | #import "_RXDelegateProxy.h" 17 | #import "_RXKVOObserver.h" 18 | #import "_RXObjCRuntime.h" 19 | 20 | FOUNDATION_EXPORT double RxCocoaVersionNumber; 21 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[]; 22 | 23 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxCocoa/RxCocoa.modulemap: -------------------------------------------------------------------------------- 1 | framework module RxCocoa { 2 | umbrella header "RxCocoa-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxCocoa/RxCocoa.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RxCocoa 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RxSwift" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxCocoa 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxGesture/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxGesture/RxGesture-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_RxGesture : NSObject 3 | @end 4 | @implementation PodsDummy_RxGesture 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxGesture/RxGesture-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxGesture/RxGesture-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double RxGestureVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char RxGestureVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxGesture/RxGesture.modulemap: -------------------------------------------------------------------------------- 1 | framework module RxGesture { 2 | umbrella header "RxGesture-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxGesture/RxGesture.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RxGesture 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RxCocoa" "$PODS_CONFIGURATION_BUILD_DIR/RxSwift" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxGesture 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxKeyboard/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.7.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxKeyboard/RxKeyboard-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_RxKeyboard : NSObject 3 | @end 4 | @implementation PodsDummy_RxKeyboard 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxKeyboard/RxKeyboard-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxKeyboard/RxKeyboard-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double RxKeyboardVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char RxKeyboardVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxKeyboard/RxKeyboard.modulemap: -------------------------------------------------------------------------------- 1 | framework module RxKeyboard { 2 | umbrella header "RxKeyboard-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxKeyboard/RxKeyboard.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RxKeyboard 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RxCocoa" "$PODS_CONFIGURATION_BUILD_DIR/RxSwift" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 5 | OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxKeyboard 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxSwift/RxSwift-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_RxSwift : NSObject 3 | @end 4 | @implementation PodsDummy_RxSwift 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxSwift/RxSwift-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxSwift/RxSwift-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double RxSwiftVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char RxSwiftVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxSwift/RxSwift.modulemap: -------------------------------------------------------------------------------- 1 | framework module RxSwift { 2 | umbrella header "RxSwift-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/RxSwift/RxSwift.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RxSwift 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxSwift 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/iOSEasyList/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/iOSEasyList/iOSEasyList-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_iOSEasyList : NSObject 3 | @end 4 | @implementation PodsDummy_iOSEasyList 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/iOSEasyList/iOSEasyList-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/iOSEasyList/iOSEasyList-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double iOSEasyListVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char iOSEasyListVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/iOSEasyList/iOSEasyList.modulemap: -------------------------------------------------------------------------------- 1 | framework module iOSEasyList { 2 | umbrella header "iOSEasyList-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/iOSEasyList/iOSEasyList.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/iOSEasyList 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | import iOSEasyList 4 | 5 | class Tests: XCTestCase { 6 | 7 | override func setUp() { 8 | super.setUp() 9 | // Put setup code here. This method is called before the invocation of each test method in the class. 10 | } 11 | 12 | override func tearDown() { 13 | // Put teardown code here. This method is called after the invocation of each test method in the class. 14 | super.tearDown() 15 | } 16 | 17 | func testExample() { 18 | // This is an example of a functional test case. 19 | XCTAssert(true, "Pass") 20 | } 21 | 22 | func testPerformanceExample() { 23 | // This is an example of a performance test case. 24 | self.measure() { 25 | // Put the code you want to measure the time of here. 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Example/iOSEasyList.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/iOSEasyList.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/iOSEasyList.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/iOSEasyList/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // iOSEasyList 4 | // 5 | // Created by mostafa.taghipour@ymail.com on 01/27/2018. 6 | // Copyright (c) 2018 mostafa.taghipour@ymail.com. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/collapse.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "collapse.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "original", 14 | "preserves-vector-representation" : true 15 | } 16 | } -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/collapse.imageset/collapse.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/Example/iOSEasyList/Images.xcassets/collapse.imageset/collapse.pdf -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/expand.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "expand.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "original", 14 | "preserves-vector-representation" : true 15 | } 16 | } -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/expand.imageset/expand.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/Example/iOSEasyList/Images.xcassets/expand.imageset/expand.pdf -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "refresh.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "original", 14 | "preserves-vector-representation" : true 15 | } 16 | } -------------------------------------------------------------------------------- /Example/iOSEasyList/Images.xcassets/refresh.imageset/refresh.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/Example/iOSEasyList/Images.xcassets/refresh.imageset/refresh.pdf -------------------------------------------------------------------------------- /Example/iOSEasyList/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/iOSEasyList/api/MovieApi.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Api.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/5/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import Moya 10 | 11 | enum MovieApi { 12 | case topRated(page:Int) 13 | case popular(page:Int) 14 | } 15 | 16 | extension MovieApi: TargetType { 17 | 18 | var baseURL: URL { 19 | guard let url = URL(string: API.baseUrl) else { fatalError("baseURL could not be configured") } 20 | return url 21 | } 22 | 23 | var path: String { 24 | switch self { 25 | case .topRated: 26 | return "top_rated" 27 | case .popular: 28 | return "popular" 29 | } 30 | } 31 | 32 | var task: Task { 33 | switch self { 34 | case .topRated(let page) , .popular(let page): 35 | return .requestParameters(parameters: ["api_key":API.apiKey, 36 | "language":"en_US", 37 | "page":page], 38 | encoding: URLEncoding.queryString) 39 | } 40 | } 41 | 42 | var method: Moya.Method { 43 | return .get 44 | } 45 | 46 | var sampleData: Data { 47 | return Data() 48 | } 49 | 50 | var headers: [String : String]? { 51 | return nil 52 | } 53 | 54 | } 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /Example/iOSEasyList/model/Message.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Message.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/19/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | struct Message{ 13 | let message: String 14 | let sender: User 15 | let createdAt: Int64 16 | } 17 | extension Message:Equatable{ 18 | static func ==(lhs: Message, rhs: Message) -> Bool { 19 | return lhs.message==rhs.message && 20 | lhs.sender==rhs.sender && 21 | lhs.createdAt == rhs.createdAt 22 | } 23 | } 24 | 25 | extension Message:Diffable{ 26 | var diffIdentifier: String { 27 | return "\(message) - \(createdAt))" 28 | } 29 | 30 | func isEqual(to object: Any) -> Bool { 31 | guard let to = object as? Message else { return false } 32 | return self == to 33 | } 34 | } 35 | 36 | struct User{ 37 | let nickname: String 38 | let avatar: UIImage? 39 | } 40 | extension User:Equatable{ 41 | static func ==(lhs: User, rhs: User) -> Bool { 42 | return lhs.nickname==rhs.nickname 43 | } 44 | } 45 | 46 | 47 | var me: User = User(nickname: "me", avatar: nil) 48 | var sarah: User = User(nickname: "sarah", avatar: #imageLiteral(resourceName: "sarah.jpeg")) 49 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/endless/HeroCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeroCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/7/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class HeroCell: BaseTableViewCell { 13 | 14 | @IBOutlet weak var yearLabel: UILabel! 15 | @IBOutlet weak var descLabel: UILabel! 16 | @IBOutlet weak var titleLabel: UILabel! 17 | @IBOutlet weak var imgView: UIImageView! 18 | @IBOutlet weak var gradiantView: GradientView! 19 | 20 | 21 | override func initialization() { 22 | imgView.contentMode = .scaleAspectFill 23 | gradiantView.layer.cornerRadius=3 24 | gradiantView.layer.masksToBounds=true 25 | } 26 | override func bind(data:Movie) { 27 | yearLabel.text="\(data.release_date![...3]) | \(data.original_language!.uppercased())" 28 | titleLabel.text=data.title 29 | descLabel.text=data.overview 30 | imgView.loadImageFromWeb(url: data.backdrop_path,width: 500) 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/endless/PopularMovieCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PopularMovieCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/8/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class PopularMovieCell: BaseCollectionViewCell { 13 | 14 | @IBOutlet weak var imgView: UIImageView! 15 | 16 | override func initialization() { 17 | imgView.contentMode = .scaleAspectFill 18 | } 19 | 20 | 21 | override func bind(data:Movie) { 22 | imgView.loadImageFromWeb(url: data.poster_path) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/expandable/ExpandableVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EndlessVC.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/4/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import RxSwift 11 | import RxGesture 12 | 13 | class ExpandableVC: UIViewController { 14 | @IBOutlet weak var tableView: UITableView! 15 | 16 | var viewModel:ExpandableVM! 17 | var bag=DisposeBag() 18 | 19 | 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | 23 | self.view.backgroundColor = UIColor.backgroundColor 24 | self.title="Expandable" 25 | 26 | viewModel=ExpandableVM() 27 | 28 | //config tableview 29 | tableView.register(UINib(nibName: MovieCell.className, bundle: nil), forCellReuseIdentifier: MovieCell.reuseIdentifier) 30 | tableView.register(UINib(nibName: CollapsibleTableViewHeader.className, bundle: nil), forHeaderFooterViewReuseIdentifier: CollapsibleTableViewHeader.reuseIdentifier) 31 | tableView.allowsSelection=false 32 | tableView.removeExtraLines() 33 | tableView.backgroundColor = .clear 34 | tableView.separatorStyle = .none 35 | tableView.rowHeight = UITableView.automaticDimension 36 | tableView.estimatedRowHeight = 125 37 | 38 | //config adapter 39 | let adapter=ExpandableAdapter(tableView: tableView) 40 | 41 | //bind tableview 42 | viewModel 43 | .items 44 | .asDriver() 45 | .drive(onNext: { (items) in 46 | adapter.setData(newData: items) 47 | }) 48 | .disposed(by: bag) 49 | 50 | } 51 | 52 | } 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/filtering/FilteringAdapter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FilteringAdapter.swift 3 | // iOSEasyList_Example 4 | // 5 | // Created by Mostafa Taghipour on 1/30/18. 6 | // Copyright © 2018 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class FilteringAdapter: TableViewAdapter,Filterable { 13 | 14 | func filterItem(_ constraint: String, _ item: Any) -> Bool { 15 | return (item as? Movie)?.title?.lowercased().contains(constraint.lowercased()) ?? false 16 | } 17 | 18 | init(tableView:UITableView) { 19 | super.init(tableView: tableView) 20 | 21 | configCell = { (tv, ip, item) -> (UITableViewCell) in 22 | let cell = tv.dequeueReusableCell(withIdentifier: MovieCell.reuseIdentifier, for: ip) as! MovieCell 23 | cell.data = item as? Movie 24 | return cell 25 | 26 | } 27 | 28 | setEmptyView(emptyView: EmptyView(frame: .zero)) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/filtering/FilteringVM.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FilteringVM.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/17/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import RxSwift 10 | 11 | class FilteringVM{ 12 | 13 | var items=Variable<[Movie]>([]) 14 | 15 | init() { 16 | loadTopMovies(page: 0) 17 | } 18 | 19 | func loadTopMovies(page:Int){ 20 | API.getTopRatedMovies(page: page+1, success: { movies in 21 | self.items.value=movies 22 | }) { _ in } 23 | } 24 | 25 | func sort(by: SortFactor) { 26 | var list = items.value 27 | list.sort(by: { (left, right) -> Bool in 28 | switch(by){ 29 | case .Title: 30 | return left.title! < right.title! 31 | case .Language: 32 | return left.original_language! < right.original_language! 33 | case .Year: 34 | return left.release_date! < right.release_date! 35 | } 36 | }) 37 | items.value = list 38 | } 39 | } 40 | 41 | 42 | enum SortFactor { 43 | case Title 44 | case Year 45 | case Language 46 | } 47 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/layout/FlowCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FlowCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/23/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class FlowCell: BaseCollectionViewCell { 13 | 14 | 15 | @IBOutlet weak var container: UIView! 16 | @IBOutlet weak var titleLabel: UILabel! 17 | @IBOutlet weak var imgView: UIImageView! 18 | 19 | 20 | override func initialization() { 21 | imgView.contentMode = .scaleAspectFill 22 | imgView.layer.cornerRadius = imgView.frame.height/2 23 | imgView.layer.masksToBounds = true 24 | contentView.layer.cornerRadius = contentView.frame.height/2 25 | contentView.layer.masksToBounds=true 26 | } 27 | 28 | override func bind(data:Movie) { 29 | titleLabel.text=data.title 30 | imgView.loadImageFromWeb(url: data.poster_path) 31 | } 32 | } 33 | 34 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/layout/GridCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GridCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/18/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | class GridCell: BaseCollectionViewCell { 12 | 13 | 14 | @IBOutlet weak var titleLabel: UILabel! 15 | @IBOutlet weak var imgView: UIImageView! 16 | 17 | 18 | override func initialization() { 19 | imgView.contentMode = .scaleAspectFill 20 | } 21 | 22 | override func bind(data:Movie) { 23 | titleLabel.text=data.title 24 | imgView.loadImageFromWeb(url: data.poster_path) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/layout/LayoutVM.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LayoutVM.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/17/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import RxSwift 10 | 11 | class LayoutVM{ 12 | 13 | var items=Variable<[Movie]>([]) 14 | 15 | init() { 16 | loadTopMovies(page: 0) 17 | } 18 | 19 | func loadTopMovies(page:Int){ 20 | API.getTopRatedMovies(page: page+1, success: { movies in 21 | self.items.value.append(contentsOf: movies) 22 | }) { _ in } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/layout/ListCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ListCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/18/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class ListCell: BaseCollectionViewCell { 13 | 14 | @IBOutlet weak var yearLabel: UILabel! 15 | @IBOutlet weak var descLabel: UILabel! 16 | @IBOutlet weak var titleLabel: UILabel! 17 | @IBOutlet weak var imgView: UIImageView! 18 | @IBOutlet weak var widthConstraint: NSLayoutConstraint! 19 | 20 | 21 | override func initialization() { 22 | imgView.contentMode = .scaleAspectFill 23 | 24 | 25 | } 26 | 27 | private func fullWidthDynamicHeight(){ 28 | self.contentView.translatesAutoresizingMaskIntoConstraints = false 29 | let screenWidth = UIScreen.main.bounds.size.width 30 | widthConstraint.constant = screenWidth 31 | setNeedsLayout() 32 | layoutIfNeeded() 33 | } 34 | 35 | override func bind(data:Movie) { 36 | yearLabel.text="\(data.release_date![...3]) | \(data.original_language!.uppercased())" 37 | titleLabel.text=data.title 38 | descLabel.text=data.overview 39 | imgView.loadImageFromWeb(url: data.poster_path) 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/layout/StaggeredCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StaggeredCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/18/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class StaggeredCell: BaseCollectionViewCell { 13 | 14 | @IBOutlet weak var heightConstraint: NSLayoutConstraint! 15 | @IBOutlet weak var widthConstraint: NSLayoutConstraint! 16 | @IBOutlet weak var imgView: UIImageView! 17 | 18 | override func initialization() { 19 | imgView.contentMode = .scaleAspectFill 20 | self.contentView.translatesAutoresizingMaskIntoConstraints=false 21 | } 22 | 23 | override func bind(data:Movie) { 24 | imgView.loadImageFromWeb(url: data.poster_path) 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/messaging/MessageReceiveCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessageReceiveCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/19/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class MessageReceiveCell: BaseTableViewCell { 13 | 14 | @IBOutlet weak var messageContainer: UIView! 15 | @IBOutlet weak var messageLabel: UILabel! 16 | @IBOutlet weak var time: UILabel! 17 | @IBOutlet weak var avatar: UIImageView! 18 | @IBOutlet weak var sender: UILabel! 19 | 20 | override func initialization() { 21 | messageContainer.layer.cornerRadius = 20 22 | transform = CGAffineTransform(scaleX: 1, y: -1) 23 | } 24 | 25 | override func bind(data: Message) { 26 | messageLabel.text=data.message 27 | time.text=Date.formatDateTime(milis: data.createdAt) 28 | avatar?.image=data.sender.avatar 29 | sender.text=data.sender.nickname 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/messaging/MessageSendCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessageSendCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/19/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class MessageSendCell: BaseTableViewCell { 13 | @IBOutlet weak var messageContainer: UIView! 14 | @IBOutlet weak var messageLabel: UILabel! 15 | @IBOutlet weak var time: UILabel! 16 | 17 | override func initialization() { 18 | messageContainer.layer.cornerRadius = 20 19 | transform = CGAffineTransform(scaleX: 1, y: -1) 20 | } 21 | 22 | override func bind(data: Message) { 23 | messageLabel.text=data.message 24 | time.text=Date.formatDateTime(milis: data.createdAt) 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/messaging/MessagingVM.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagingVM.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/19/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RxSwift 11 | 12 | class MessagingVM { 13 | 14 | let items = Variable<[Message]>([]) 15 | 16 | init() { 17 | loadMessages() 18 | } 19 | 20 | private func loadMessages() { 21 | var list = [Message]() 22 | list.append( Message(message: "can you borrow me your book, i really need it \ni promise you give back it very soon.", sender: sarah, createdAt: Date().millisecondsSince1970)) 23 | list.append( Message(message: "hi sarah \ni'm fine", sender: me, createdAt: Date().millisecondsSince1970-200000)) 24 | list.append( Message(message: "hi john how are you ?", sender: sarah, createdAt: Date().millisecondsSince1970-300000)) 25 | items.value=list 26 | } 27 | 28 | func sendMessage(message: String) { 29 | items.value.insert(Message(message: message, sender: me, createdAt: Date().millisecondsSince1970), at: 0) 30 | } 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/sectioned/SectionFooter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SectionFooter.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/9/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | 13 | class SectionFooter: UITableViewHeaderFooterView,ReusableView { 14 | 15 | @IBOutlet weak var label: UILabel! 16 | 17 | var data:MovieSection?{ 18 | didSet{ 19 | guard let movie = data else { return } 20 | bind(data: movie) 21 | } 22 | } 23 | 24 | override func awakeFromNib() { 25 | super.awakeFromNib() 26 | contentView.backgroundColor=UIColor.backgroundColor 27 | } 28 | 29 | func bind(data:MovieSection) { 30 | label.text = "There are \(data.movies.count) movies that started with the letter \(data.firstLetter)" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/sectioned/SectionedVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EndlessVC.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/4/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import RxGesture 10 | import RxSwift 11 | import UIKit 12 | 13 | class SectionedVC: UIViewController { 14 | @IBOutlet var tableView: UITableView! 15 | 16 | var viewModel: SectionedVM! 17 | var bag = DisposeBag() 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | 22 | view.backgroundColor = UIColor.backgroundColor 23 | title = "Sectioned" 24 | 25 | viewModel = SectionedVM() 26 | 27 | // config tableview 28 | tableView.register(UINib(nibName: MovieCell.className, bundle: nil), forCellReuseIdentifier: MovieCell.reuseIdentifier) 29 | tableView.register(UINib(nibName: SectionFooter.className, bundle: nil), forHeaderFooterViewReuseIdentifier: SectionFooter.reuseIdentifier) 30 | tableView.allowsSelection = false 31 | tableView.removeExtraLines() 32 | tableView.backgroundColor = .clear 33 | tableView.separatorStyle = .none 34 | tableView.rowHeight = UITableView.automaticDimension 35 | tableView.estimatedRowHeight = 125 36 | 37 | let adapter = SectionedAdapter(tableView: tableView) 38 | 39 | // bind tableview 40 | viewModel 41 | .items 42 | .asDriver() 43 | .drive(onNext: { movieSections in 44 | adapter.setData(newData: movieSections) 45 | }) 46 | .disposed(by: bag) 47 | } 48 | 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/sectioned/SectionedVM.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EndlessVM.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/5/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import RxSwift 10 | import iOSEasyList 11 | 12 | class SectionedVM{ 13 | var items=Variable<[MovieSection]>([]) 14 | 15 | 16 | init() { 17 | loadTopMovies(page: 1) 18 | } 19 | 20 | func loadTopMovies(page:Int){ 21 | 22 | API.getTopRatedMovies(page: page, success: { movies in 23 | 24 | let newItems : [MovieSection] = movies.grouped(by: { (movie) -> Character in 25 | return (movie.title?.first)! 26 | }) 27 | .sorted{ $0.key < $1.key } 28 | .map{ MovieSection(firstLetter: String($0.key), movies: $0.value) } 29 | 30 | 31 | self.items.value=newItems 32 | 33 | }) { error in 34 | } 35 | } 36 | } 37 | 38 | 39 | 40 | struct MovieSection { 41 | let firstLetter:String 42 | let movies:[Movie] 43 | } 44 | 45 | extension MovieSection:Section{ 46 | var items: Array { 47 | return movies 48 | } 49 | } 50 | 51 | 52 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/shared/EmptyView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyView.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/17/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class EmptyView: NibView { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/shared/ErrorView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ErrorView.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/5/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ErrorView: NibView { 12 | 13 | @IBOutlet weak var retryButton: UIButton! 14 | @IBOutlet weak var errorCause: UILabel! 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/shared/LoadingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoadingView.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/5/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class LoadingView: NibView { 12 | 13 | @IBOutlet weak var activityIndicator:UIActivityIndicatorView! 14 | 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/shared/MovieCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/5/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import iOSEasyList 11 | 12 | class MovieCell: BaseTableViewCell { 13 | 14 | @IBOutlet weak var yearLabel: UILabel! 15 | @IBOutlet weak var descLabel: UILabel! 16 | @IBOutlet weak var titleLabel: UILabel! 17 | @IBOutlet weak var imgView: UIImageView! 18 | 19 | 20 | override func initialization() { 21 | imgView.contentMode = .scaleAspectFill 22 | } 23 | 24 | override func bind(data:Movie) { 25 | yearLabel.text="\(data.release_date![...3]) | \(data.original_language!.uppercased())" 26 | titleLabel.text=data.title 27 | descLabel.text=data.overview 28 | imgView.loadImageFromWeb(url: data.poster_path) 29 | } 30 | } 31 | 32 | 33 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/shared/ProgressFooter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressFooter.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/5/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProgressFooter: NibView { 12 | @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 13 | } 14 | -------------------------------------------------------------------------------- /Example/iOSEasyList/modules/shared/RetryFooter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // retryFooter.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/7/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RetryFooter: NibView { 12 | 13 | @IBOutlet weak var reloadImage: UIImageView! 14 | @IBOutlet weak var loadMoreErrorText:UILabel! 15 | 16 | override func commonInit() { 17 | reloadImage.layer.masksToBounds=true 18 | reloadImage.layer.cornerRadius=20 19 | reloadImage.layer.borderWidth=1 20 | reloadImage.layer.borderColor = UIColor.placeHolder.cgColor 21 | reloadImage.layer.backgroundColor = UIColor.placeHolder.withAlphaComponent(0.2).cgColor 22 | reloadImage.tintColor = .placeHolder 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/iOSEasyList/sarah.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/Example/iOSEasyList/sarah.jpeg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Mostafa Taghipour 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /iOSEasyList/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/iOSEasyList/Assets/.gitkeep -------------------------------------------------------------------------------- /iOSEasyList/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/iOSEasyList/Classes/.gitkeep -------------------------------------------------------------------------------- /iOSEasyList/Classes/BaseCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseCell.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/12/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public protocol ReusableView { 12 | static var reuseIdentifier: String { get } 13 | } 14 | 15 | public extension ReusableView { 16 | static var reuseIdentifier: String { 17 | return String(describing: self) 18 | } 19 | } 20 | 21 | 22 | open class BaseTableViewCell:UITableViewCell,ReusableView { 23 | public var data:T?{ 24 | didSet{ 25 | guard let data = data else { return } 26 | bind(data: data) 27 | } 28 | } 29 | 30 | override open func awakeFromNib() { 31 | super.awakeFromNib() 32 | // Initialization code 33 | initialization() 34 | } 35 | 36 | open func initialization(){} 37 | 38 | open func bind(data:T){} 39 | } 40 | 41 | open class BaseCollectionViewCell:UICollectionViewCell,ReusableView { 42 | public var data:T?{ 43 | didSet{ 44 | guard let data = data else { return } 45 | bind(data: data) 46 | } 47 | } 48 | 49 | override open func awakeFromNib() { 50 | super.awakeFromNib() 51 | // Initialization code 52 | initialization() 53 | } 54 | 55 | open func initialization(){} 56 | open func bind(data:T){} 57 | } 58 | 59 | -------------------------------------------------------------------------------- /iOSEasyList/Classes/Filterable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Filterable.swift 3 | // AKMaskField 4 | // 5 | // Created by Remote User on 1/30/18. 6 | // 7 | 8 | import Foundation 9 | 10 | public protocol Filterable { 11 | func filterItem (_ constraint: String,_ item: Any)-> Bool 12 | } 13 | 14 | public extension Filterable{ 15 | private var adapter:ListAdapter{ 16 | guard let adapter = self as? ListAdapter else { 17 | fatalError("Filterable must implemment by ListAdapter") 18 | } 19 | 20 | return adapter 21 | } 22 | internal func setData(newData:[Any]?){ 23 | if !adapter._private_lockNoneFilteredItems{ 24 | adapter._private_originalItems=newData 25 | } 26 | } 27 | func setFilterConstraint(constraint: String?){ 28 | adapter._private_lockNoneFilteredItems=true 29 | 30 | var list = adapter._private_originalItems 31 | 32 | if let query=constraint , !query.isEmpty{ 33 | list = list?.filter{ 34 | filterItem(query,$0) 35 | } 36 | } 37 | 38 | adapter.setData(newData: list) 39 | 40 | adapter._private_lockNoneFilteredItems=false 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /iOSEasyList/Classes/UICollectionViewFullWidthFlowLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FullWidthCellsFlowLayout.swift 3 | // ListExample-iOS 4 | // 5 | // Created by Mostafa Taghipour on 1/18/18. 6 | // Copyright © 2018 RainyDay. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public class UICollectionViewFullWidthFlowLayout : UICollectionViewFlowLayout { 12 | 13 | public func fullWidth(forBounds bounds:CGRect) -> CGFloat { 14 | 15 | let contentInsets = self.collectionView!.contentInset 16 | 17 | return bounds.width - sectionInset.left - sectionInset.right - contentInsets.left - contentInsets.right 18 | } 19 | 20 | // MARK: Overrides 21 | 22 | override public func prepare() { 23 | itemSize.width = fullWidth(forBounds: collectionView!.bounds) 24 | super.prepare() 25 | } 26 | 27 | override public func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { 28 | if !newBounds.size.equalTo(collectionView!.bounds.size) { 29 | itemSize.width = fullWidth(forBounds: newBounds) 30 | return true 31 | } 32 | return false 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /screenshots/animation-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/animation-ios.gif -------------------------------------------------------------------------------- /screenshots/expandable_ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/expandable_ios.gif -------------------------------------------------------------------------------- /screenshots/filtering-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/filtering-ios.gif -------------------------------------------------------------------------------- /screenshots/layout-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/layout-ios.gif -------------------------------------------------------------------------------- /screenshots/message-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/message-ios.gif -------------------------------------------------------------------------------- /screenshots/pagination-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/pagination-ios.gif -------------------------------------------------------------------------------- /screenshots/sectioned-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/4935cbd6e4626a42e29e6a44d931969192d429ae/screenshots/sectioned-ios.gif --------------------------------------------------------------------------------