├── .gitignore
├── HyperRecipe.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcuserdata
│ └── rebouhaymen.xcuserdatad
│ └── xcschemes
│ ├── HyperRecipe.xcscheme
│ └── xcschememanagement.plist
├── HyperRecipe.xcworkspace
├── contents.xcworkspacedata
└── xcuserdata
│ └── rebouhaymen.xcuserdatad
│ └── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
├── HyperRecipe
├── APIs
│ ├── Network
│ │ └── RecipeNetwork.swift
│ ├── RecipeAPI.swift
│ └── RecipeRouter.swift
├── Animations
│ └── CAEmitterRecipe.swift
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x-1.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x-1.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ ├── Contents.json
│ ├── Cross.imageset
│ │ ├── Contents.json
│ │ └── Cross.pdf
│ ├── Fruit and vegetables
│ │ ├── Contents.json
│ │ ├── apple-2.imageset
│ │ │ ├── Contents.json
│ │ │ ├── apple-2.png
│ │ │ ├── apple-2@2x.png
│ │ │ └── apple-2@3x.png
│ │ ├── broccoli.imageset
│ │ │ ├── Contents.json
│ │ │ ├── broccoli.png
│ │ │ ├── broccoli@2x.png
│ │ │ └── broccoli@3x.png
│ │ ├── cheese.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cheese.png
│ │ │ ├── cheese@2x.png
│ │ │ └── cheese@3x.png
│ │ ├── cherry.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cherry.png
│ │ │ ├── cherry@2x.png
│ │ │ └── cherry@3x.png
│ │ ├── chicken-leg.imageset
│ │ │ ├── Contents.json
│ │ │ ├── chicken-leg.png
│ │ │ ├── chicken-leg@2x.png
│ │ │ └── chicken-leg@3x.png
│ │ ├── fried-egg.imageset
│ │ │ ├── Contents.json
│ │ │ ├── fried-egg.png
│ │ │ ├── fried-egg@2x.png
│ │ │ └── fried-egg@3x.png
│ │ ├── grapes.imageset
│ │ │ ├── Contents.json
│ │ │ ├── grapes.png
│ │ │ ├── grapes@2x.png
│ │ │ └── grapes@3x.png
│ │ ├── ham.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ham.png
│ │ │ ├── ham@2x.png
│ │ │ └── ham@3x.png
│ │ ├── lobster.imageset
│ │ │ ├── Contents.json
│ │ │ ├── lobster.png
│ │ │ ├── lobster@2x.png
│ │ │ └── lobster@3x.png
│ │ ├── meat.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meat.png
│ │ │ ├── meat@2x.png
│ │ │ └── meat@3x.png
│ │ ├── melon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── melon.png
│ │ │ ├── melon@2x.png
│ │ │ └── melon@3x.png
│ │ ├── mushroom.imageset
│ │ │ ├── Contents.json
│ │ │ ├── mushroom.png
│ │ │ ├── mushroom@2x.png
│ │ │ └── mushroom@3x.png
│ │ ├── orange-2.imageset
│ │ │ ├── Contents.json
│ │ │ ├── orange-2.png
│ │ │ ├── orange-2@2x.png
│ │ │ └── orange-2@3x.png
│ │ ├── orange.imageset
│ │ │ ├── Contents.json
│ │ │ ├── orange.png
│ │ │ ├── orange@2x.png
│ │ │ └── orange@3x.png
│ │ ├── pear.imageset
│ │ │ ├── Contents.json
│ │ │ ├── pear.png
│ │ │ ├── pear@2x.png
│ │ │ └── pear@3x.png
│ │ ├── pizza-2.imageset
│ │ │ ├── Contents.json
│ │ │ ├── pizza-2.png
│ │ │ ├── pizza-2@2x.png
│ │ │ └── pizza-2@3x.png
│ │ ├── pizza.imageset
│ │ │ ├── Contents.json
│ │ │ ├── pizza.png
│ │ │ ├── pizza@2x.png
│ │ │ └── pizza@3x.png
│ │ ├── radish.imageset
│ │ │ ├── Contents.json
│ │ │ ├── radish.png
│ │ │ ├── radish@2x.png
│ │ │ └── radish@3x.png
│ │ ├── strawberry.imageset
│ │ │ ├── Contents.json
│ │ │ ├── strawberry.png
│ │ │ ├── strawberry@2x.png
│ │ │ └── strawberry@3x.png
│ │ └── watermelon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── watermelon.png
│ │ │ ├── watermelon@2x.png
│ │ │ └── watermelon@3x.png
│ ├── Recipe form
│ │ ├── Contents.json
│ │ ├── favorite-fill.imageset
│ │ │ ├── Contents.json
│ │ │ └── favorite-fill.pdf
│ │ ├── favorite.imageset
│ │ │ ├── Contents.json
│ │ │ └── favorite.pdf
│ │ └── recipePlaceholder.imageset
│ │ │ ├── Contents.json
│ │ │ └── recipePlaceholder.pdf
│ ├── Tab bar
│ │ ├── Contents.json
│ │ ├── addRecipe.imageset
│ │ │ ├── Contents.json
│ │ │ └── addRecipe.pdf
│ │ └── recipe.imageset
│ │ │ ├── Contents.json
│ │ │ └── recipe.pdf
│ ├── bottomArrow.imageset
│ │ ├── Contents.json
│ │ └── Disclosure Indicator.pdf
│ ├── flagFavorite-selected.imageset
│ │ ├── Contents.json
│ │ └── flagFavorite.pdf
│ ├── flagFavorite.imageset
│ │ ├── Contents.json
│ │ └── flagFavorite.pdf
│ ├── logo.imageset
│ │ ├── Contents.json
│ │ └── logo.png
│ ├── menu.imageset
│ │ ├── Contents.json
│ │ └── Menu.pdf
│ └── recipeBackgroundPlaceholder.imageset
│ │ ├── Contents.json
│ │ └── recipePlaceholder.pdf
├── Base.lproj
│ └── Main.storyboard
├── DependencyInjection
│ └── SwinjectStoryboardExtension.swift
├── Extensions
│ ├── ArrayExtension.swift
│ └── ColorExtension.swift
├── Info.plist
├── Models
│ ├── Photo.swift
│ └── Recipe.swift
├── Stub
│ └── RecipeStub.swift
├── ViewControllers
│ ├── AboutViewController.swift
│ ├── BaseNavigationViewController.swift
│ ├── ExploreViewController.swift
│ ├── RecipeExpandingTableViewController.swift
│ ├── RecipeFormViewController.swift
│ └── SplashViewController.swift
├── ViewModel
│ ├── RecipeFormViewModel.swift
│ └── RecipeViewModel.swift
├── Views
│ ├── DifficultyView
│ │ ├── DifficultyView.swift
│ │ └── DifficultyView.xib
│ ├── RecipeCollectionViewCell
│ │ ├── RecipeCollectionViewCell.swift
│ │ └── RecipeCollectionViewCell.xib
│ └── RecipeDetailSectionCell
│ │ ├── RecipeDetailHeaderSectionCell.swift
│ │ └── RecipeDetailSectionCell.swift
└── getRecipes.json
├── 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
├── AlamofireImage
│ ├── LICENSE
│ ├── README.md
│ └── Source
│ │ ├── AFIError.swift
│ │ ├── Image.swift
│ │ ├── ImageCache.swift
│ │ ├── ImageDownloader.swift
│ │ ├── ImageFilter.swift
│ │ ├── Request+AlamofireImage.swift
│ │ ├── UIButton+AlamofireImage.swift
│ │ ├── UIImage+AlamofireImage.swift
│ │ └── UIImageView+AlamofireImage.swift
├── Decodable
│ ├── LICENSE
│ ├── README.md
│ └── Sources
│ │ ├── Castable.swift
│ │ ├── Decodable.h
│ │ ├── Decodable.swift
│ │ ├── Decoders.swift
│ │ ├── DecodingError.swift
│ │ ├── KeyPath.swift
│ │ ├── NSValueCastable.swift
│ │ ├── Operators.swift
│ │ ├── OptionalKeyPath.swift
│ │ ├── Overloads.swift
│ │ ├── Parse.swift
│ │ └── RawRepresentableDecodable.swift
├── Manifest.lock
├── Pods.xcodeproj
│ ├── project.pbxproj
│ └── xcuserdata
│ │ └── rebouhaymen.xcuserdatad
│ │ └── xcschemes
│ │ ├── Alamofire.xcscheme
│ │ ├── Decodable.xcscheme
│ │ ├── Pods-HyperRecipe.xcscheme
│ │ ├── RxCocoa.xcscheme
│ │ ├── RxSwift.xcscheme
│ │ ├── Swinject.xcscheme
│ │ ├── SwinjectStoryboard.xcscheme
│ │ ├── expanding-collection.xcscheme
│ │ └── xcschememanagement.plist
├── RxCocoa
│ ├── LICENSE.md
│ ├── Platform
│ │ ├── DataStructures
│ │ │ ├── Bag.swift
│ │ │ ├── InfiniteSequence.swift
│ │ │ ├── PriorityQueue.swift
│ │ │ └── Queue.swift
│ │ ├── DispatchQueue+Extensions.swift
│ │ ├── Platform.Darwin.swift
│ │ └── Platform.Linux.swift
│ ├── README.md
│ └── RxCocoa
│ │ ├── CocoaUnits
│ │ ├── ControlEvent.swift
│ │ ├── ControlProperty.swift
│ │ ├── Driver
│ │ │ ├── ControlEvent+Driver.swift
│ │ │ ├── ControlProperty+Driver.swift
│ │ │ ├── Driver+Subscription.swift
│ │ │ ├── Driver.swift
│ │ │ ├── ObservableConvertibleType+Driver.swift
│ │ │ └── Variable+Driver.swift
│ │ ├── SharedSequence
│ │ │ ├── ObservableConvertibleType+SharedSequence.swift
│ │ │ ├── SharedSequence+Operators+arity.swift
│ │ │ ├── SharedSequence+Operators.swift
│ │ │ ├── SharedSequence.swift
│ │ │ └── Variable+SharedSequence.swift
│ │ └── UIBindingObserver.swift
│ │ ├── Common
│ │ ├── ControlTarget.swift
│ │ ├── DelegateProxy.swift
│ │ ├── DelegateProxyType.swift
│ │ ├── NSLayoutConstraint+Rx.swift
│ │ ├── Observable+Bind.swift
│ │ ├── RxCocoaObjCRuntimeError+Extensions.swift
│ │ ├── RxTarget.swift
│ │ ├── SectionedViewDataSourceType.swift
│ │ └── TextInput.swift
│ │ ├── Foundation
│ │ ├── KVORepresentable+CoreGraphics.swift
│ │ ├── KVORepresentable+Swift.swift
│ │ ├── KVORepresentable.swift
│ │ ├── Logging.swift
│ │ ├── NSNotificationCenter+Rx.swift
│ │ ├── NSObject+Rx+KVORepresentable.swift
│ │ ├── NSObject+Rx+RawRepresentable.swift
│ │ ├── NSObject+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
│ │ └── iOS
│ │ ├── DataSources
│ │ ├── RxCollectionViewReactiveArrayDataSource.swift
│ │ └── RxTableViewReactiveArrayDataSource.swift
│ │ ├── Events
│ │ └── ItemEvents.swift
│ │ ├── NSTextStorage+Rx.swift
│ │ ├── Protocols
│ │ ├── RxCollectionViewDataSourceType.swift
│ │ └── RxTableViewDataSourceType.swift
│ │ ├── Proxies
│ │ ├── RxCollectionViewDataSourceProxy.swift
│ │ ├── RxCollectionViewDelegateProxy.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
│ │ ├── 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
├── RxSwift
│ ├── LICENSE.md
│ ├── Platform
│ │ ├── DataStructures
│ │ │ ├── Bag.swift
│ │ │ ├── InfiniteSequence.swift
│ │ │ ├── PriorityQueue.swift
│ │ │ └── Queue.swift
│ │ ├── DispatchQueue+Extensions.swift
│ │ ├── Platform.Darwin.swift
│ │ └── Platform.Linux.swift
│ ├── README.md
│ └── RxSwift
│ │ ├── AnyObserver.swift
│ │ ├── Cancelable.swift
│ │ ├── Concurrency
│ │ ├── AsyncLock.swift
│ │ ├── Lock.swift
│ │ ├── LockOwnerType.swift
│ │ ├── SynchronizedDisposeType.swift
│ │ ├── SynchronizedOnType.swift
│ │ ├── SynchronizedSubscribeType.swift
│ │ └── SynchronizedUnsubscribeType.swift
│ │ ├── ConnectableObservableType.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
│ │ ├── ImmediateSchedulerType.swift
│ │ ├── Observable.swift
│ │ ├── ObservableConvertibleType.swift
│ │ ├── ObservableType+Extensions.swift
│ │ ├── ObservableType.swift
│ │ ├── Observables
│ │ ├── Implementations
│ │ │ ├── AddRef.swift
│ │ │ ├── Amb.swift
│ │ │ ├── AnonymousObservable.swift
│ │ │ ├── Buffer.swift
│ │ │ ├── Catch.swift
│ │ │ ├── CombineLatest+Collection.swift
│ │ │ ├── CombineLatest+arity.swift
│ │ │ ├── CombineLatest.swift
│ │ │ ├── Concat.swift
│ │ │ ├── ConnectableObservable.swift
│ │ │ ├── Debug.swift
│ │ │ ├── Debunce.swift
│ │ │ ├── Deferred.swift
│ │ │ ├── Delay.swift
│ │ │ ├── DelaySubscription.swift
│ │ │ ├── DistinctUntilChanged.swift
│ │ │ ├── Do.swift
│ │ │ ├── ElementAt.swift
│ │ │ ├── Empty.swift
│ │ │ ├── Error.swift
│ │ │ ├── Filter.swift
│ │ │ ├── Generate.swift
│ │ │ ├── Just.swift
│ │ │ ├── Map.swift
│ │ │ ├── Merge.swift
│ │ │ ├── Multicast.swift
│ │ │ ├── Never.swift
│ │ │ ├── ObserveOn.swift
│ │ │ ├── ObserveOnSerialDispatchQueue.swift
│ │ │ ├── Optional.swift
│ │ │ ├── Producer.swift
│ │ │ ├── Range.swift
│ │ │ ├── Reduce.swift
│ │ │ ├── RefCount.swift
│ │ │ ├── Repeat.swift
│ │ │ ├── RetryWhen.swift
│ │ │ ├── Sample.swift
│ │ │ ├── Scan.swift
│ │ │ ├── Sequence.swift
│ │ │ ├── ShareReplay1.swift
│ │ │ ├── ShareReplay1WhileConnected.swift
│ │ │ ├── SingleAsync.swift
│ │ │ ├── Sink.swift
│ │ │ ├── Skip.swift
│ │ │ ├── SkipUntil.swift
│ │ │ ├── SkipWhile.swift
│ │ │ ├── StartWith.swift
│ │ │ ├── SubscribeOn.swift
│ │ │ ├── Switch.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
│ │ ├── Observable+Aggregate.swift
│ │ ├── Observable+Binding.swift
│ │ ├── Observable+Concurrency.swift
│ │ ├── Observable+Creation.swift
│ │ ├── Observable+Debug.swift
│ │ ├── Observable+Multiple.swift
│ │ ├── Observable+Single.swift
│ │ ├── Observable+StandardSequenceOperators.swift
│ │ └── Observable+Time.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
│ │ ├── ImmediateScheduler.swift
│ │ ├── Internal
│ │ │ ├── AnonymousInvocable.swift
│ │ │ ├── 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
│ │ ├── BehaviorSubject.swift
│ │ ├── PublishSubject.swift
│ │ ├── ReplaySubject.swift
│ │ ├── SubjectType.swift
│ │ └── Variable.swift
├── Swinject
│ ├── LICENSE.txt
│ ├── README.md
│ └── Sources
│ │ ├── Assembler.swift
│ │ ├── Assembly.swift
│ │ ├── Container.Arguments.swift
│ │ ├── Container.Logging.swift
│ │ ├── Container.swift
│ │ ├── DebugHelper.swift
│ │ ├── FunctionType.swift
│ │ ├── InstanceStorage.swift
│ │ ├── ObjectScope.Standard.swift
│ │ ├── ObjectScope.swift
│ │ ├── Resolver.swift
│ │ ├── ServiceEntry.swift
│ │ ├── ServiceKey.swift
│ │ ├── SpinLock.swift
│ │ ├── Swinject.h
│ │ ├── SynchronizedResolver.Arguments.swift
│ │ ├── SynchronizedResolver.swift
│ │ ├── UnavailableItems.swift
│ │ └── _Resolver.swift
├── SwinjectStoryboard
│ ├── LICENSE.txt
│ ├── README.md
│ └── Sources
│ │ ├── Box.swift
│ │ ├── Container+SwinjectStoryboard.swift
│ │ ├── InjectionVerifiable.swift
│ │ ├── RegistrationNameAssociatable.swift
│ │ ├── Storyboard+Swizzling.swift
│ │ ├── SwinjectStoryboard+StoryboardReference.swift
│ │ ├── SwinjectStoryboard.h
│ │ ├── SwinjectStoryboard.swift
│ │ ├── SwinjectStoryboardOption.swift
│ │ ├── SwinjectStoryboardProtocol.swift
│ │ ├── UnavailableItems.swift
│ │ ├── ViewController+Swinject.swift
│ │ └── iOS-tvOS
│ │ ├── _SwinjectStoryboardBase.h
│ │ └── _SwinjectStoryboardBase.m
├── Target Support Files
│ ├── Alamofire
│ │ ├── Alamofire-dummy.m
│ │ ├── Alamofire-prefix.pch
│ │ ├── Alamofire-umbrella.h
│ │ ├── Alamofire.modulemap
│ │ ├── Alamofire.xcconfig
│ │ └── Info.plist
│ ├── AlamofireImage
│ │ ├── AlamofireImage-dummy.m
│ │ ├── AlamofireImage-prefix.pch
│ │ ├── AlamofireImage-umbrella.h
│ │ ├── AlamofireImage.modulemap
│ │ ├── AlamofireImage.xcconfig
│ │ └── Info.plist
│ ├── Decodable
│ │ ├── Decodable-dummy.m
│ │ ├── Decodable-prefix.pch
│ │ ├── Decodable-umbrella.h
│ │ ├── Decodable.modulemap
│ │ ├── Decodable.xcconfig
│ │ └── Info.plist
│ ├── Pods-HyperRecipe
│ │ ├── Info.plist
│ │ ├── Pods-HyperRecipe-acknowledgements.markdown
│ │ ├── Pods-HyperRecipe-acknowledgements.plist
│ │ ├── Pods-HyperRecipe-dummy.m
│ │ ├── Pods-HyperRecipe-frameworks.sh
│ │ ├── Pods-HyperRecipe-resources.sh
│ │ ├── Pods-HyperRecipe-umbrella.h
│ │ ├── Pods-HyperRecipe.debug.xcconfig
│ │ ├── Pods-HyperRecipe.modulemap
│ │ └── Pods-HyperRecipe.release.xcconfig
│ ├── RxCocoa
│ │ ├── Info.plist
│ │ ├── RxCocoa-dummy.m
│ │ ├── RxCocoa-prefix.pch
│ │ ├── RxCocoa-umbrella.h
│ │ ├── RxCocoa.modulemap
│ │ └── RxCocoa.xcconfig
│ ├── RxSwift
│ │ ├── Info.plist
│ │ ├── RxSwift-dummy.m
│ │ ├── RxSwift-prefix.pch
│ │ ├── RxSwift-umbrella.h
│ │ ├── RxSwift.modulemap
│ │ └── RxSwift.xcconfig
│ ├── Swinject
│ │ ├── Info.plist
│ │ ├── Swinject-dummy.m
│ │ ├── Swinject-prefix.pch
│ │ ├── Swinject-umbrella.h
│ │ ├── Swinject.modulemap
│ │ └── Swinject.xcconfig
│ ├── SwinjectStoryboard
│ │ ├── Info.plist
│ │ ├── SwinjectStoryboard-dummy.m
│ │ ├── SwinjectStoryboard-prefix.pch
│ │ ├── SwinjectStoryboard-umbrella.h
│ │ ├── SwinjectStoryboard.modulemap
│ │ └── SwinjectStoryboard.xcconfig
│ └── expanding-collection
│ │ ├── Info.plist
│ │ ├── expanding-collection-dummy.m
│ │ ├── expanding-collection-prefix.pch
│ │ ├── expanding-collection-umbrella.h
│ │ ├── expanding-collection.modulemap
│ │ └── expanding-collection.xcconfig
└── expanding-collection
│ ├── LICENSE
│ ├── README.md
│ └── Source
│ ├── ExpandingTableViewController
│ └── ExpandingTableViewController.swift
│ ├── ExpandingViewController
│ ├── CollectionView
│ │ ├── Cells
│ │ │ └── BasePageCollectionCell.swift
│ │ ├── Layout
│ │ │ └── PageCollectionLayout.swift
│ │ └── PageCollectionView.swift
│ └── ExpandingViewController.swift
│ ├── Helpers
│ ├── Animations
│ │ └── CornerAnimatable
│ │ │ └── CornerAnimatable.swift
│ ├── ConfigurationHelper
│ │ └── ConfigurationHelper.swift
│ ├── Constraints Helpers
│ │ └── ConstraintsHelper.swift
│ ├── ScreenShot
│ │ └── ScreenShotHelper.swift
│ └── SubviewsForEach
│ │ └── SubviewsForEach.swift
│ └── TransitionDriver
│ └── TransitionDriver.swift
├── README.md
└── README
├── Add.png
├── AppIcon.png
├── Explore.png
└── SplashScreen.png
/.gitignore:
--------------------------------------------------------------------------------
1 | *.xcscheme
2 |
--------------------------------------------------------------------------------
/HyperRecipe.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/HyperRecipe.xcodeproj/xcuserdata/rebouhaymen.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | HyperRecipe Stub.xcscheme
8 |
9 | orderHint
10 | 10
11 |
12 | HyperRecipe.xcscheme
13 |
14 | orderHint
15 | 0
16 |
17 |
18 | SuppressBuildableAutocreation
19 |
20 | A514F2971E31604F00AC875B
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/HyperRecipe.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/HyperRecipe.xcworkspace/xcuserdata/rebouhaymen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/HyperRecipe/APIs/RecipeAPI.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecipeAPI.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 21/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import RxSwift
11 | import RxCocoa
12 |
13 | protocol RecipeAPI {
14 | func getAllRecipes() -> Observable<[Recipe]>
15 | func deleteRecipe(id: Int) -> Observable<()>
16 | func updateRecipe(withId id: Int, andData data: [String: Any]) -> Observable<()>
17 | func createRecipe(withData data: [String: Any]) -> Observable
18 | }
19 |
--------------------------------------------------------------------------------
/HyperRecipe/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 19/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. 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: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | UITabBar.appearance().tintColor = UIColor.hyperOrange
19 |
20 | return true
21 | }
22 |
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Cross.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Cross.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Cross.imageset/Cross.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Cross.imageset/Cross.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "apple-2.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "apple-2@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "apple-2@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/apple-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/apple-2.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/apple-2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/apple-2@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/apple-2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/apple-2.imageset/apple-2@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "broccoli.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "broccoli@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "broccoli@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/broccoli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/broccoli.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/broccoli@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/broccoli@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/broccoli@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/broccoli.imageset/broccoli@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cheese.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cheese@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cheese@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/cheese.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/cheese.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/cheese@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/cheese@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/cheese@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/cheese.imageset/cheese@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cherry.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cherry@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cherry@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/cherry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/cherry.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/cherry@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/cherry@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/cherry@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/cherry.imageset/cherry@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "chicken-leg.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "chicken-leg@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "chicken-leg@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/chicken-leg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/chicken-leg.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/chicken-leg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/chicken-leg@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/chicken-leg@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/chicken-leg.imageset/chicken-leg@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "fried-egg.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "fried-egg@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "fried-egg@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/fried-egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/fried-egg.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/fried-egg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/fried-egg@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/fried-egg@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/fried-egg.imageset/fried-egg@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "grapes.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "grapes@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "grapes@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/grapes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/grapes.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/grapes@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/grapes@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/grapes@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/grapes.imageset/grapes@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ham.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ham@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ham@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/ham.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/ham.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/ham@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/ham@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/ham@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/ham.imageset/ham@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "lobster.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "lobster@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "lobster@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/lobster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/lobster.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/lobster@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/lobster@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/lobster@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/lobster.imageset/lobster@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "meat.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "meat@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "meat@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/meat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/meat.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/meat@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/meat@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/meat@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/meat.imageset/meat@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "melon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "melon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "melon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/melon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/melon.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/melon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/melon@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/melon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/melon.imageset/melon@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mushroom.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "mushroom@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "mushroom@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/mushroom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/mushroom.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/mushroom@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/mushroom@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/mushroom@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/mushroom.imageset/mushroom@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "orange-2.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "orange-2@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "orange-2@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/orange-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/orange-2.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/orange-2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/orange-2@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/orange-2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange-2.imageset/orange-2@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "orange.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "orange@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "orange@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/orange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/orange.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/orange@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/orange@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/orange@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/orange.imageset/orange@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "pear.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "pear@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "pear@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/pear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/pear.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/pear@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/pear@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/pear@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pear.imageset/pear@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "pizza-2.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "pizza-2@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "pizza-2@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/pizza-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/pizza-2.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/pizza-2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/pizza-2@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/pizza-2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza-2.imageset/pizza-2@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "pizza.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "pizza@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "pizza@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/pizza.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/pizza.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/pizza@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/pizza@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/pizza@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/pizza.imageset/pizza@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "radish.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "radish@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "radish@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/radish.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/radish.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/radish@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/radish@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/radish@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/radish.imageset/radish@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "strawberry.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "strawberry@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "strawberry@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/strawberry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/strawberry.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/strawberry@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/strawberry@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/strawberry@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/strawberry.imageset/strawberry@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "watermelon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "watermelon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "watermelon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/watermelon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/watermelon.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/watermelon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/watermelon@2x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/watermelon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Fruit and vegetables/watermelon.imageset/watermelon@3x.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/favorite-fill.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "favorite-fill.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/favorite-fill.imageset/favorite-fill.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Recipe form/favorite-fill.imageset/favorite-fill.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/favorite.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "favorite.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/favorite.imageset/favorite.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Recipe form/favorite.imageset/favorite.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/recipePlaceholder.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "recipePlaceholder.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Recipe form/recipePlaceholder.imageset/recipePlaceholder.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Recipe form/recipePlaceholder.imageset/recipePlaceholder.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Tab bar/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Tab bar/addRecipe.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "addRecipe.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Tab bar/addRecipe.imageset/addRecipe.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Tab bar/addRecipe.imageset/addRecipe.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Tab bar/recipe.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "recipe.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "template-rendering-intent" : "original"
14 | }
15 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/Tab bar/recipe.imageset/recipe.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/Tab bar/recipe.imageset/recipe.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/bottomArrow.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Disclosure Indicator.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/bottomArrow.imageset/Disclosure Indicator.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/bottomArrow.imageset/Disclosure Indicator.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/flagFavorite-selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "flagFavorite.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/flagFavorite-selected.imageset/flagFavorite.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/flagFavorite-selected.imageset/flagFavorite.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/flagFavorite.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "flagFavorite.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/flagFavorite.imageset/flagFavorite.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/flagFavorite.imageset/flagFavorite.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "logo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/logo.imageset/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/logo.imageset/logo.png
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/menu.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Menu.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/menu.imageset/Menu.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/menu.imageset/Menu.pdf
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/recipeBackgroundPlaceholder.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "recipePlaceholder.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/HyperRecipe/Assets.xcassets/recipeBackgroundPlaceholder.imageset/recipePlaceholder.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/HyperRecipe/Assets.xcassets/recipeBackgroundPlaceholder.imageset/recipePlaceholder.pdf
--------------------------------------------------------------------------------
/HyperRecipe/DependencyInjection/SwinjectStoryboardExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwinjectStoryboardExtension.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 22/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Swinject
11 | import SwinjectStoryboard
12 |
13 | extension SwinjectStoryboard {
14 | class func setup() {
15 |
16 | Container.loggingFunction = nil
17 |
18 | // Scheme HyperRecipe Stub/Run/Arguments and you'll find below the Stub argument
19 | if ProcessInfo.processInfo.arguments.contains("Stub") {
20 | defaultContainer.register(RecipeAPI.self) { _ in RecipeStub() }
21 | } else {
22 | defaultContainer.register(RecipeAPI.self) { _ in RecipeNetwork() }
23 | }
24 |
25 | defaultContainer.register(RecipeViewModel.self) { r in
26 | let viewModel = RecipeViewModel(service: r.resolve(RecipeAPI.self)!)
27 | return viewModel
28 | }
29 |
30 | defaultContainer.register(RecipeFormViewModel.self) { r in
31 | let viewModel = RecipeFormViewModel(service: r.resolve(RecipeAPI.self)!)
32 | return viewModel
33 | }
34 |
35 | defaultContainer.storyboardInitCompleted(ExploreViewController.self) { r, c in
36 | c.viewModel = r.resolve(RecipeViewModel.self)
37 | }
38 |
39 | defaultContainer.storyboardInitCompleted(RecipeFormViewController.self) { r, c in
40 | c.viewModel = r.resolve(RecipeFormViewModel.self)
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/HyperRecipe/Extensions/ArrayExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ArrayExtension.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 21/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension Array {
12 | func randomSort() -> Array {
13 | let sortedArray = sorted { _ in arc4random() < arc4random() }
14 | return sortedArray
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/HyperRecipe/Extensions/ColorExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ColorExtension.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 21/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIColor {
12 | static let hyperDarkBlue = #colorLiteral(red: 0.2469966114, green: 0.3779316545, blue: 0.4080758095, alpha: 1)
13 | static let hyperBeige = #colorLiteral(red: 0.9310407043, green: 0.9225626588, blue: 0.8535305858, alpha: 1)
14 | static let hyperOrange = #colorLiteral(red: 0.9698477387, green: 0.5682272315, blue: 0.2841275036, alpha: 1)
15 | static let hyperBrown = #colorLiteral(red: 0.8176086545, green: 0.6650074124, blue: 0.5771699548, alpha: 1)
16 | }
17 |
--------------------------------------------------------------------------------
/HyperRecipe/Models/Photo.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Photo.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 21/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Decodable
11 |
12 |
13 | struct Photo {
14 | let url: String
15 | let thumbnailUrl: String
16 | }
17 |
18 | extension Photo: Decodable {
19 | public static func decode(_ json: Any) throws -> Photo {
20 | return try Photo(
21 | url: json => "url",
22 | thumbnailUrl: json => "thumbnail_url"
23 | )
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/HyperRecipe/Models/Recipe.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Recipe.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 19/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Decodable
11 |
12 | struct Recipe {
13 | let id: Int
14 | var name: String
15 | var description: String
16 | var instructions: String
17 | var favorite: Bool
18 | var difficulty: Int
19 | let createdDate: String
20 | let updatedDate: String
21 | let photo: Photo
22 | }
23 |
24 | extension Recipe: Decodable {
25 | public static func decode(_ json: Any) throws -> Recipe {
26 | return try Recipe(
27 | id: json => "id",
28 | name: json => "name",
29 | description: json => "description",
30 | instructions: json => "instructions",
31 | favorite: json => "favorite",
32 | difficulty: json => "difficulty",
33 | createdDate: json => "created_at",
34 | updatedDate: json => "updated_at",
35 | photo: json => "photo"
36 | )
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/HyperRecipe/ViewControllers/AboutViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AboutViewController.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 21/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class AboutViewController: UIViewController {
12 |
13 | // MARK: - User Interaction
14 |
15 | @IBAction func redirectToBlog(_ sender: Any) {
16 | if let url = URL(string: "http://aymenworks.com") {
17 | UIApplication.shared.open(url, options: [:], completionHandler: nil)
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/HyperRecipe/ViewControllers/BaseNavigationViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseNavigationViewController.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 31/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseNavigationViewController: UINavigationController {
12 |
13 | // MARK: - Lifecycle
14 |
15 | override func viewDidLoad() {
16 | super.viewDidLoad()
17 |
18 | navigationBar.shadowImage = UIImage()
19 | navigationBar.setBackgroundImage(UIImage(), for: .default)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/HyperRecipe/ViewControllers/SplashViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SplashViewController.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 02/02/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class SplashViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | CAEmitterRecipe.animate(inView: self.view, duration: 0.3)
17 | DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
18 | self.performSegue(withIdentifier: "showApp", sender: self)
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/HyperRecipe/ViewModel/RecipeViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecipeViewModel.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 22/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import RxSwift
11 | import RxCocoa
12 |
13 | struct RecipeViewModel {
14 |
15 | // MARK: - Properties
16 |
17 | let service: RecipeAPI
18 | var recipes = [Recipe]()
19 | let error = Variable(nil)
20 |
21 | var currentLevel = 2
22 |
23 | let disposeBag = DisposeBag()
24 |
25 | // MARK: - Lifecycle
26 |
27 | init(service: RecipeAPI) {
28 | self.service = service
29 | }
30 |
31 | // MARK: - Network
32 |
33 | func getAllRecipes() -> Observable<[Recipe]> {
34 | return Observable<[Recipe]>.create { observer in
35 | self.service.getAllRecipes().subscribe(
36 | onNext: { recipes in
37 | observer.onNext(recipes)
38 | },
39 | onError: { error in
40 | observer.onError(error)
41 | }).addDisposableTo(self.disposeBag)
42 | return Disposables.create()
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/HyperRecipe/Views/RecipeCollectionViewCell/RecipeCollectionViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecipeCollectionViewCell.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 22/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import expanding_collection
11 | import RxSwift
12 | import RxCocoa
13 |
14 | class RecipeCollectionViewCell: BasePageCollectionCell {
15 |
16 | // MARK: - Properties
17 |
18 | let disposeBag = DisposeBag()
19 | @IBOutlet weak var recipeImageView: UIImageView!
20 | @IBOutlet weak var titleLabel: UILabel!
21 | @IBOutlet weak var descriptionLabel: UILabel!
22 | @IBOutlet weak var flagFavorite: UIImageView!
23 |
24 | var isFavorite = false {
25 | didSet {
26 | flagFavorite.isHidden = isFavorite == false
27 | }
28 | }
29 |
30 | var recipe: Recipe! {
31 | didSet {
32 | titleLabel.text = recipe.name
33 | descriptionLabel.text = recipe.description
34 | isFavorite = recipe.favorite
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/HyperRecipe/Views/RecipeDetailSectionCell/RecipeDetailHeaderSectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecipeDetailHeaderSectionCell.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 29/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class RecipeDetailHeaderSectionCell: UITableViewCell {
12 | @IBOutlet weak var titleLabel: UILabel!
13 | }
14 |
--------------------------------------------------------------------------------
/HyperRecipe/Views/RecipeDetailSectionCell/RecipeDetailSectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecipeDetailSectionCell.swift
3 | // HyperRecipe
4 | //
5 | // Created by Rebouh Aymen on 28/01/2017.
6 | // Copyright © 2017 Aymen Rebouh. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class RecipeDetailSectionCell: UITableViewCell {
12 |
13 | @IBOutlet weak var headerView: UIView!
14 |
15 | @IBOutlet weak var mainView: UIView! {
16 | didSet {
17 | mainView.layer.cornerRadius = 5
18 | mainView.layer.shadowColor = UIColor(red: 221/255, green: 221/250, blue: 221/250, alpha: 1.0).cgColor
19 | mainView.layer.shadowOffset = .zero
20 | mainView.layer.shadowRadius = 5.0
21 | mainView.layer.shadowOpacity = 1.0
22 | }
23 | }
24 |
25 | override func layoutSubviews() {
26 | let bezierPath = UIBezierPath(roundedRect: headerView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 5, height: 5))
27 | let maskLayer = CAShapeLayer()
28 | maskLayer.path = bezierPath.cgPath
29 | headerView.layer.mask = maskLayer
30 | }
31 |
32 | @IBOutlet weak var titleLabel: UILabel!
33 | @IBOutlet weak var descriptionLabel: UILabel!
34 | }
35 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '10.0'
2 | use_frameworks!
3 |
4 | target 'HyperRecipe' do
5 | pod 'RxSwift', '~> 3.0'
6 | pod 'RxCocoa', '~> 3.0'
7 | pod 'Decodable'
8 | pod 'Alamofire', '~> 4.0'
9 | pod 'AlamofireImage', '~> 3.1'
10 | pod 'Swinject', '~> 2.0.0'
11 | pod 'SwinjectStoryboard', '~> 1.0.0'
12 | pod 'expanding-collection', '~> 1.0.3'
13 | end
14 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Alamofire (4.3.0)
3 | - AlamofireImage (3.2.0):
4 | - Alamofire (~> 4.1)
5 | - Decodable (0.5)
6 | - expanding-collection (1.0.4)
7 | - RxCocoa (3.1.0):
8 | - RxSwift (~> 3.1)
9 | - RxSwift (3.1.0)
10 | - Swinject (2.0.0)
11 | - SwinjectStoryboard (1.0.0):
12 | - Swinject (= 2.0.0)
13 |
14 | DEPENDENCIES:
15 | - Alamofire (~> 4.0)
16 | - AlamofireImage (~> 3.1)
17 | - Decodable
18 | - expanding-collection (~> 1.0.3)
19 | - RxCocoa (~> 3.0)
20 | - RxSwift (~> 3.0)
21 | - Swinject (~> 2.0.0)
22 | - SwinjectStoryboard (~> 1.0.0)
23 |
24 | SPEC CHECKSUMS:
25 | Alamofire: 856a113053a7bc9cbe5d6367a555d773fc5cfef7
26 | AlamofireImage: 157ed682cc81d3b9db4fb90c1f12180ac552d93b
27 | Decodable: 7c90acc68d357b71d0d6efc120faf9c53c644b7e
28 | expanding-collection: be78b5822d7382d3da02b52d52273f4661567a64
29 | RxCocoa: 50d7564866da9299161e86a263ce12a0873904d8
30 | RxSwift: 83ff553e7593fdfdcb2562933a64c0284dffdadc
31 | Swinject: 2e964a80d70ab09b3949c99032711f89147bfd60
32 | SwinjectStoryboard: 8e0d3c0202b64172bdf915d55e8dc83d9c4e7863
33 |
34 | PODFILE CHECKSUM: d444880811037130514f310c04232dfc5e2be8cf
35 |
36 | COCOAPODS: 1.1.1
37 |
--------------------------------------------------------------------------------
/Pods/Alamofire/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014-2016 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 |
--------------------------------------------------------------------------------
/Pods/AlamofireImage/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015-2016 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 |
--------------------------------------------------------------------------------
/Pods/AlamofireImage/Source/Image.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Image.swift
3 | //
4 | // Copyright (c) 2015-2016 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import Foundation
26 |
27 | #if os(iOS) || os(tvOS) || os(watchOS)
28 | import UIKit
29 | public typealias Image = UIImage
30 | #elseif os(macOS)
31 | import Cocoa
32 | public typealias Image = NSImage
33 | #endif
34 |
--------------------------------------------------------------------------------
/Pods/Decodable/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Johannes Lund
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 |
--------------------------------------------------------------------------------
/Pods/Decodable/Sources/Decodable.h:
--------------------------------------------------------------------------------
1 | //
2 | // Decodable.h
3 | // Decodable
4 | //
5 | // Created by Johannes Lund on 2015-07-08.
6 | // Copyright © 2015 anviking. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Decodable.
12 | FOUNDATION_EXPORT double DecodableVersionNumber;
13 |
14 | //! Project version string for Decodable.
15 | FOUNDATION_EXPORT const unsigned char DecodableVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Pods/Decodable/Sources/KeyPath.swift:
--------------------------------------------------------------------------------
1 | //
2 | // KeyPath.swift
3 | // Decodable
4 | //
5 | // Created by Johannes Lund on 2016-07-09.
6 | // Copyright © 2016 anviking. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// `KeyPath` represents the path to a specific node in a tree of nested dictionaries.
12 | ///
13 | /// Can be created from string and array literals and can be joined by the `=>` operator.
14 | /// ```
15 | /// let a: KeyPath = "a"
16 | /// let b: KeyPath = ["a", "b"]
17 | /// let c: KeyPath = "a" => "b" => "c"
18 | /// ```
19 |
20 | public struct KeyPath {
21 | public var keys: [String]
22 |
23 | public init(_ keys: [String]) {
24 | self.keys = keys
25 | }
26 |
27 | public init(_ key: String) {
28 | self.keys = [key]
29 | }
30 |
31 | }
32 |
33 | extension KeyPath: ExpressibleByStringLiteral {
34 | public init(stringLiteral value: String) {
35 | self.keys = [value]
36 | }
37 |
38 | public init(extendedGraphemeClusterLiteral value: String) {
39 | self.keys = [value]
40 | }
41 |
42 | public init(unicodeScalarLiteral value: String) {
43 | self.keys = [value]
44 | }
45 | }
46 |
47 | extension KeyPath: ExpressibleByArrayLiteral {
48 | public init(arrayLiteral elements: String...) {
49 | self.keys = elements
50 | }
51 | }
52 |
53 | extension KeyPath: Equatable { }
54 | public func ==(lhs: KeyPath, rhs: KeyPath) -> Bool {
55 | return lhs.keys == rhs.keys
56 | }
57 |
--------------------------------------------------------------------------------
/Pods/Decodable/Sources/RawRepresentableDecodable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RawRepresentableDecodable.swift
3 | // Decodable
4 | //
5 | // Created by Daniel Garbień on 06/11/15.
6 | // Copyright © 2015 anviking. All rights reserved.
7 | //
8 |
9 | /**
10 | * Extends all RawRepresentables (enums) which are also Decodable with decode implementation.
11 | *
12 | * I could not find a way to implicitly declare RawRepresentable conforming to Decodable, what would make all enums Decodable automatically.
13 | * Because of that for an enum to be compatible with Decodable operators it must be declared as implementing Decodable protocol.
14 | */
15 | public extension RawRepresentable where RawValue: Decodable, Self: Decodable {
16 |
17 | static func decode(_ json: Any) throws -> Self {
18 | let rawValue = try RawValue.decode(json)
19 | guard let rawRepresentable = Self(rawValue: rawValue) else {
20 | let metadata = DecodingError.Metadata(object: json)
21 | throw DecodingError.rawRepresentableInitializationError(rawValue: rawValue, metadata)
22 | }
23 | return rawRepresentable
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Alamofire (4.3.0)
3 | - AlamofireImage (3.2.0):
4 | - Alamofire (~> 4.1)
5 | - Decodable (0.5)
6 | - expanding-collection (1.0.4)
7 | - RxCocoa (3.1.0):
8 | - RxSwift (~> 3.1)
9 | - RxSwift (3.1.0)
10 | - Swinject (2.0.0)
11 | - SwinjectStoryboard (1.0.0):
12 | - Swinject (= 2.0.0)
13 |
14 | DEPENDENCIES:
15 | - Alamofire (~> 4.0)
16 | - AlamofireImage (~> 3.1)
17 | - Decodable
18 | - expanding-collection (~> 1.0.3)
19 | - RxCocoa (~> 3.0)
20 | - RxSwift (~> 3.0)
21 | - Swinject (~> 2.0.0)
22 | - SwinjectStoryboard (~> 1.0.0)
23 |
24 | SPEC CHECKSUMS:
25 | Alamofire: 856a113053a7bc9cbe5d6367a555d773fc5cfef7
26 | AlamofireImage: 157ed682cc81d3b9db4fb90c1f12180ac552d93b
27 | Decodable: 7c90acc68d357b71d0d6efc120faf9c53c644b7e
28 | expanding-collection: be78b5822d7382d3da02b52d52273f4661567a64
29 | RxCocoa: 50d7564866da9299161e86a263ce12a0873904d8
30 | RxSwift: 83ff553e7593fdfdcb2562933a64c0284dffdadc
31 | Swinject: 2e964a80d70ab09b3949c99032711f89147bfd60
32 | SwinjectStoryboard: 8e0d3c0202b64172bdf915d55e8dc83d9c4e7863
33 |
34 | PODFILE CHECKSUM: d444880811037130514f310c04232dfc5e2be8cf
35 |
36 | COCOAPODS: 1.1.1
37 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Sequence that repeats `repeatedValue` infinite number of times.
12 | struct InfiniteSequence : Sequence {
13 | typealias Element = E
14 | typealias Iterator = AnyIterator
15 |
16 | private let _repeatedValue: E
17 |
18 | init(repeatedValue: E) {
19 | _repeatedValue = repeatedValue
20 | }
21 |
22 | func makeIterator() -> Iterator {
23 | let repeatedValue = _repeatedValue
24 | return AnyIterator {
25 | return repeatedValue
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/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 Foundation
10 | import Dispatch
11 |
12 | extension DispatchQueue {
13 | private static var token: DispatchSpecificKey<()> = {
14 | let key = DispatchSpecificKey<()>()
15 | DispatchQueue.main.setSpecific(key: key, value: ())
16 | return key
17 | }()
18 |
19 | static var isMain: Bool {
20 | return DispatchQueue.getSpecific(key: token) != nil
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/Platform/Platform.Darwin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Platform.Darwin.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
10 |
11 | import Darwin
12 | import Foundation
13 |
14 | typealias AtomicInt = Int32
15 |
16 | let AtomicCompareAndSwap = OSAtomicCompareAndSwap32Barrier
17 | let AtomicIncrement = OSAtomicIncrement32Barrier
18 | let AtomicDecrement = OSAtomicDecrement32Barrier
19 |
20 | extension Thread {
21 |
22 | static func setThreadLocalStorageValue(_ value: T?, forKey key: String
23 | ) {
24 | let currentThread = Thread.current
25 | let threadDictionary = currentThread.threadDictionary
26 |
27 | if let newValue = value {
28 | threadDictionary[key] = newValue
29 | }
30 | else {
31 | threadDictionary[key] = nil
32 | }
33 |
34 | }
35 | static func getThreadLocalStorageValueForKey(_ key: String) -> T? {
36 | let currentThread = Thread.current
37 | let threadDictionary = currentThread.threadDictionary
38 |
39 | return threadDictionary[key] as? T
40 | }
41 | }
42 |
43 | extension AtomicInt {
44 | func valueSnapshot() -> Int32 {
45 | return self
46 | }
47 | }
48 |
49 | #endif
50 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/CocoaUnits/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 | import Foundation
10 | #if !RX_NO_MODULE
11 | import RxSwift
12 | #endif
13 |
14 | extension ControlEvent {
15 | /// Converts `ControlEvent` to `Driver` unit.
16 | ///
17 | /// `ControlEvent` already can't fail, so no special case needs to be handled.
18 | public func asDriver() -> Driver {
19 | return self.asDriver { (error) -> Driver in
20 | #if DEBUG
21 | rxFatalError("Somehow driver received error from a source that shouldn't fail.")
22 | #else
23 | return Driver.empty()
24 | #endif
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/CocoaUnits/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 | import Foundation
10 | #if !RX_NO_MODULE
11 | import RxSwift
12 | #endif
13 |
14 | extension ControlProperty {
15 | /// Converts `ControlProperty` to `Driver` unit.
16 | ///
17 | /// `ControlProperty` already can't fail, so no special case needs to be handled.
18 | public func asDriver() -> Driver {
19 | return self.asDriver { (error) -> Driver in
20 | #if DEBUG
21 | rxFatalError("Somehow driver received error from a source that shouldn't fail.")
22 | #else
23 | return Driver.empty()
24 | #endif
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/CocoaUnits/Driver/Variable+Driver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Variable+Driver.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 12/28/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | #if !RX_NO_MODULE
11 | import RxSwift
12 | #endif
13 |
14 | extension Variable {
15 | /// Converts `Variable` to `Driver` unit.
16 | ///
17 | /// - returns: Driving observable sequence.
18 | public func asDriver() -> Driver {
19 | let source = self.asObservable()
20 | .observeOn(DriverSharingStrategy.scheduler)
21 | return Driver(source)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/CocoaUnits/SharedSequence/Variable+SharedSequence.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Variable+SharedSequence.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 12/28/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | #if !RX_NO_MODULE
11 | import RxSwift
12 | #endif
13 |
14 | extension Variable {
15 | /// Converts `Variable` to `SharedSequence` unit.
16 | ///
17 | /// - returns: Observable sequence.
18 | public func asSharedSequence(strategy: SharingStrategy.Type = SharingStrategy.self) -> SharedSequence {
19 | let source = self.asObservable()
20 | .observeOn(SharingStrategy.scheduler)
21 | return SharedSequence(source)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 |
13 | #if os(macOS)
14 | import Cocoa
15 | #else
16 | import UIKit
17 | #endif
18 |
19 | #if !RX_NO_MODULE
20 | import RxSwift
21 | #endif
22 |
23 | #if os(iOS) || os(macOS) || os(tvOS)
24 | extension Reactive where Base: NSLayoutConstraint {
25 | /// Bindable sink for `constant` property.
26 | public var constant: UIBindingObserver {
27 | return UIBindingObserver(UIElement: self.base) { constraint, constant in
28 | constraint.constant = constant
29 | }
30 | }
31 |
32 | /// Bindable sink for `active` property.
33 | @available(iOS 8, OSX 10.10, *)
34 | public var active: UIBindingObserver {
35 | return UIBindingObserver(UIElement: self.base) { constraint, value in
36 | constraint.isActive = value
37 | }
38 | }
39 | }
40 |
41 | #endif
42 |
43 | #endif
44 |
--------------------------------------------------------------------------------
/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 Foundation
10 | #if !RX_NO_MODULE
11 | import RxSwift
12 | #endif
13 |
14 | class RxTarget : NSObject
15 | , Disposable {
16 |
17 | private var retainSelf: RxTarget?
18 |
19 | override init() {
20 | super.init()
21 | self.retainSelf = self
22 |
23 | #if TRACE_RESOURCES
24 | _ = Resources.incrementTotal()
25 | #endif
26 |
27 | #if DEBUG
28 | MainScheduler.ensureExecutingOnScheduler()
29 | #endif
30 | }
31 |
32 | func dispose() {
33 | #if DEBUG
34 | MainScheduler.ensureExecutingOnScheduler()
35 | #endif
36 | self.retainSelf = nil
37 | }
38 |
39 | #if TRACE_RESOURCES
40 | deinit {
41 | _ = Resources.decrementTotal()
42 | }
43 | #endif
44 | }
45 |
--------------------------------------------------------------------------------
/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 Foundation
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 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Type that is KVO representable (KVO mechanism can be used to observe it).
12 | public protocol KVORepresentable {
13 | /// Associated KVO type.
14 | associatedtype KVOType
15 |
16 | /// Constructs `Self` using KVO value.
17 | init?(KVOValue: KVOType)
18 | }
19 |
20 | extension KVORepresentable {
21 | /// Initializes `KVORepresentable` with optional value.
22 | init?(KVOValue: KVOType?) {
23 | guard let KVOValue = KVOValue else {
24 | return nil
25 | }
26 |
27 | self.init(KVOValue: KVOValue)
28 | }
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/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 Foundation
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 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/Foundation/NSNotificationCenter+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSNotificationCenter+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 Foundation
10 | #if !RX_NO_MODULE
11 | import RxSwift
12 | #endif
13 |
14 | extension Reactive where Base: NotificationCenter {
15 | /**
16 | Transforms notifications posted to notification center to observable sequence of notifications.
17 |
18 | - parameter name: Optional name used to filter notifications.
19 | - parameter object: Optional object used to filter notifications.
20 | - returns: Observable sequence of posted notifications.
21 | */
22 | public func notification(_ name: Notification.Name?, object: AnyObject? = nil) -> Observable {
23 | return Observable.create { [weak object] observer in
24 | let nsObserver = self.base.addObserver(forName: name, object: object, queue: nil) { notification in
25 | observer.on(.next(notification))
26 | }
27 |
28 | return Disposables.create {
29 | self.base.removeObserver(nsObserver)
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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;
18 |
19 | -(BOOL)hasWiredImplementationForSelector:(SEL)selector;
20 |
21 | -(void)_sentMessage:(SEL)selector withArguments:(NSArray*)arguments;
22 | -(void)_methodInvoked:(SEL)selector withArguments:(NSArray*)arguments;
23 |
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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[];
--------------------------------------------------------------------------------
/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 | import Foundation
10 | #if os(iOS) || os(tvOS)
11 | import UIKit
12 |
13 | public typealias ItemMovedEvent = (sourceIndex: IndexPath, destinationIndex: IndexPath)
14 | public typealias WillDisplayCellEvent = (cell: UITableViewCell, indexPath: IndexPath)
15 | public typealias DidEndDisplayingCellEvent = (cell: UITableViewCell, indexPath: IndexPath)
16 | #endif
17 |
--------------------------------------------------------------------------------
/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 | import Foundation
11 |
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: NSTextStorage {
18 |
19 | /// Reactive wrapper for `delegate`.
20 | ///
21 | /// For more information take a look at `DelegateProxyType` protocol documentation.
22 | public var delegate:DelegateProxy {
23 | return RxTextStorageDelegateProxy.proxyForObject(base)
24 | }
25 |
26 | /// Reactive wrapper for `delegate` message.
27 | public var didProcessEditingRangeChangeInLength: Observable<(editedMask:NSTextStorageEditActions, editedRange:NSRange, delta:Int)> {
28 | return delegate
29 | .methodInvoked(#selector(NSTextStorageDelegate.textStorage(_:didProcessEditing:range:changeInLength:)))
30 | .map { a in
31 | let editedMask = NSTextStorageEditActions(rawValue: try castOrThrow(UInt.self, a[1]) )
32 | let editedRange = try castOrThrow(NSValue.self, a[2]).rangeValue
33 | let delta = try castOrThrow(Int.self, a[3])
34 |
35 | return (editedMask, editedRange, delta)
36 | }
37 | }
38 | }
39 | #endif
40 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// Marks data source as `UICollectionView` reactive data source enabling it to be used with one of the `bindTo` methods.
18 | public protocol RxCollectionViewDataSourceType /*: UICollectionViewDataSource*/ {
19 |
20 | /// Type of elements that can be bound to collection view.
21 | associatedtype Element
22 |
23 | /// New observable sequence event observed.
24 | ///
25 | /// - parameter collectionView: Bound collection view.
26 | /// - parameter observedEvent: Event
27 | func collectionView(_ collectionView: UICollectionView, observedEvent: Event) -> Void
28 | }
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// Marks data source as `UITableView` reactive data source enabling it to be used with one of the `bindTo` methods.
18 | public protocol RxTableViewDataSourceType /*: UITableViewDataSource*/ {
19 |
20 | /// Type of elements that can be bound to table view.
21 | associatedtype Element
22 |
23 | /// New observable sequence event observed.
24 | ///
25 | /// - parameter tableView: Bound table view.
26 | /// - parameter observedEvent: Event
27 | func tableView(_ tableView: UITableView, observedEvent: Event) -> Void
28 | }
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// For more information take a look at `DelegateProxyType`.
18 | public class RxCollectionViewDelegateProxy
19 | : RxScrollViewDelegateProxy
20 | , UICollectionViewDelegate
21 | , UICollectionViewDelegateFlowLayout {
22 |
23 | /// Typed parent object.
24 | public weak private(set) var collectionView: UICollectionView?
25 |
26 | /// Initializes `RxCollectionViewDelegateProxy`
27 | ///
28 | /// - parameter parentObject: Parent object for delegate proxy.
29 | public required init(parentObject: AnyObject) {
30 | self.collectionView = castOrFatalError(parentObject)
31 | super.init(parentObject: parentObject)
32 | }
33 | }
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | public class RxPickerViewDelegateProxy
18 | : DelegateProxy
19 | , DelegateProxyType
20 | , UIPickerViewDelegate {
21 |
22 | /// For more information take a look at `DelegateProxyType`.
23 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
24 | let pickerView: UIPickerView = castOrFatalError(object)
25 | pickerView.delegate = castOptionalOrFatalError(delegate)
26 | }
27 |
28 | /// For more information take a look at `DelegateProxyType`.
29 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
30 | let pickerView: UIPickerView = castOrFatalError(object)
31 | return pickerView.delegate
32 | }
33 | }
34 | #endif
35 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// For more information take a look at `DelegateProxyType`.
18 | public class RxSearchBarDelegateProxy
19 | : DelegateProxy
20 | , UISearchBarDelegate
21 | , DelegateProxyType {
22 |
23 | /// For more information take a look at `DelegateProxyType`.
24 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
25 | let searchBar: UISearchBar = castOrFatalError(object)
26 | return searchBar.delegate
27 | }
28 |
29 | /// For more information take a look at `DelegateProxyType`.
30 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
31 | let searchBar: UISearchBar = castOrFatalError(object)
32 | searchBar.delegate = castOptionalOrFatalError(delegate)
33 | }
34 |
35 | // MARK: Delegate proxy methods
36 |
37 | #if os(iOS)
38 | /// For more information take a look at `DelegateProxyType`.
39 | public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
40 | let searchBar: UISearchBar = castOrFatalError(object)
41 | return searchBar.createRxDelegateProxy()
42 | }
43 | #endif
44 |
45 | }
46 |
47 | #endif
48 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | /// For more information take a look at `DelegateProxyType`.
18 | @available(iOS 8.0, *)
19 | public class RxSearchControllerDelegateProxy
20 | : DelegateProxy
21 | , DelegateProxyType
22 | , UISearchControllerDelegate {
23 |
24 | /// For more information take a look at `DelegateProxyType`.
25 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
26 | let searchController: UISearchController = castOrFatalError(object)
27 | searchController.delegate = castOptionalOrFatalError(delegate)
28 | }
29 |
30 | /// For more information take a look at `DelegateProxyType`.
31 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
32 | let searchController: UISearchController = castOrFatalError(object)
33 | return searchController.delegate
34 | }
35 |
36 | }
37 |
38 | #endif
39 |
--------------------------------------------------------------------------------
/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 Foundation
11 | import UIKit
12 |
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// For more information take a look at `DelegateProxyType`.
18 | public class RxTabBarControllerDelegateProxy
19 | : DelegateProxy
20 | , UITabBarControllerDelegate
21 | , DelegateProxyType {
22 |
23 | /// For more information take a look at `DelegateProxyType`.
24 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
25 | let tabBarController: UITabBarController = castOrFatalError(object)
26 | return tabBarController.delegate
27 | }
28 |
29 | /// For more information take a look at `DelegateProxyType`.
30 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
31 | let tabBarController: UITabBarController = castOrFatalError(object)
32 | tabBarController.delegate = castOptionalOrFatalError(delegate)
33 | }
34 |
35 | /// For more information take a look at `DelegateProxyType`.
36 | public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
37 | let tabBarController: UITabBarController = castOrFatalError(object)
38 | return tabBarController.createRxDelegateProxy()
39 | }
40 | }
41 |
42 | #endif
43 |
--------------------------------------------------------------------------------
/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 Foundation
11 | import UIKit
12 |
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// For more information take a look at `DelegateProxyType`.
18 | public class RxTabBarDelegateProxy
19 | : DelegateProxy
20 | , UITabBarDelegate
21 | , DelegateProxyType {
22 |
23 | /// For more information take a look at `DelegateProxyType`.
24 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
25 | let tabBar: UITabBar = castOrFatalError(object)
26 | return tabBar.delegate
27 | }
28 |
29 | /// For more information take a look at `DelegateProxyType`.
30 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
31 | let tabBar: UITabBar = castOrFatalError(object)
32 | tabBar.delegate = castOptionalOrFatalError(delegate)
33 | }
34 |
35 | /// For more information take a look at `DelegateProxyType`.
36 | public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
37 | let tabBar: UITabBar = castOrFatalError(object)
38 | return tabBar.createRxDelegateProxy()
39 | }
40 |
41 | }
42 |
43 | #endif
44 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | /// For more information take a look at `DelegateProxyType`.
18 | public class RxTableViewDelegateProxy
19 | : RxScrollViewDelegateProxy
20 | , UITableViewDelegate {
21 |
22 |
23 | /// Typed parent object.
24 | public weak private(set) var tableView: UITableView?
25 |
26 | /// Initializes `RxTableViewDelegateProxy`
27 | ///
28 | /// - parameter parentObject: Parent object for delegate proxy.
29 | public required init(parentObject: AnyObject) {
30 | self.tableView = castOrFatalError(parentObject)
31 | super.init(parentObject: parentObject)
32 | }
33 |
34 | }
35 |
36 | #endif
37 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | public class RxTextStorageDelegateProxy
18 | : DelegateProxy
19 | , DelegateProxyType
20 | , NSTextStorageDelegate {
21 |
22 |
23 | /// For more information take a look at `DelegateProxyType`.
24 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
25 | let textStorage: NSTextStorage = castOrFatalError(object)
26 | textStorage.delegate = castOptionalOrFatalError(delegate)
27 | }
28 |
29 | /// For more information take a look at `DelegateProxyType`.
30 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
31 | let textStorage: NSTextStorage = castOrFatalError(object)
32 | return textStorage.delegate
33 | }
34 |
35 |
36 | }
37 | #endif
38 |
--------------------------------------------------------------------------------
/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 | public class RxWebViewDelegateProxy
17 | : DelegateProxy
18 | , DelegateProxyType
19 | , UIWebViewDelegate {
20 |
21 | /**
22 | For more information take a look at `DelegateProxyType`.
23 | */
24 | public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
25 | let webView: UIWebView = castOrFatalError(object)
26 | webView.delegate = castOptionalOrFatalError(delegate)
27 | }
28 |
29 | /**
30 | For more information take a look at `DelegateProxyType`.
31 | */
32 | public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
33 | let webView: UIWebView = castOrFatalError(object)
34 | return webView.delegate
35 | }
36 |
37 |
38 | }
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/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: UIBindingObserver {
20 | return UIBindingObserver(UIElement: 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 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 |
14 | #if !RX_NO_MODULE
15 | import RxSwift
16 | #endif
17 |
18 | extension Reactive where Base: UIAlertAction {
19 |
20 | /// Bindable sink for `enabled` property.
21 | public var isEnabled: UIBindingObserver {
22 | return UIBindingObserver(UIElement: self.base) { alertAction, value in
23 | alertAction.isEnabled = value
24 | }
25 | }
26 |
27 | }
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | #if os(iOS)
12 | import UIKit
13 |
14 | #if !RX_NO_MODULE
15 | import RxSwift
16 | #endif
17 |
18 | extension Reactive where Base: UIApplication {
19 |
20 | /// Bindable sink for `networkActivityIndicatorVisible`.
21 | public var isNetworkActivityIndicatorVisible: UIBindingObserver {
22 | return UIBindingObserver(UIElement: self.base) { application, active in
23 | application.isNetworkActivityIndicatorVisible = active
24 | }
25 | }
26 | }
27 | #endif
28 |
29 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/iOS/UIButton+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIButton+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 3/28/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UIButton {
18 |
19 | /**
20 | Reactive wrapper for `TouchUpInside` control event.
21 | */
22 | public var tap: ControlEvent {
23 | return controlEvent(.touchUpInside)
24 | }
25 | }
26 |
27 | #endif
28 |
29 | #if os(tvOS)
30 |
31 | import Foundation
32 | #if !RX_NO_MODULE
33 | import RxSwift
34 | #endif
35 | import UIKit
36 |
37 | extension Reactive where Base: UIButton {
38 |
39 | /// Reactive wrapper for `PrimaryActionTriggered` control event.
40 | public var primaryAction: ControlEvent {
41 | return controlEvent(.primaryActionTriggered)
42 | }
43 |
44 | }
45 |
46 | #endif
47 |
48 | #if os(iOS) || os(tvOS)
49 |
50 | import Foundation
51 | #if !RX_NO_MODULE
52 | import RxSwift
53 | #endif
54 | import UIKit
55 |
56 | extension Reactive where Base: UIButton {
57 |
58 | /// Reactive wrapper for `setTitle(_:controlState:)`
59 | public func title(for controlState: UIControlState = []) -> UIBindingObserver {
60 | return UIBindingObserver(UIElement: self.base) { (button, title) -> () in
61 | button.setTitle(title, for: controlState)
62 | }
63 | }
64 |
65 | }
66 | #endif
67 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UIDatePicker {
18 | /// Reactive wrapper for `date` property.
19 | public var date: ControlProperty {
20 | return value
21 | }
22 |
23 | /// Reactive wrapper for `date` property.
24 | public var value: ControlProperty {
25 | return UIControl.rx.value(
26 | self.base,
27 | getter: { datePicker in
28 | datePicker.date
29 | }, setter: { datePicker, value in
30 | datePicker.date = value
31 | }
32 | )
33 | }
34 |
35 | }
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UILabel {
18 |
19 | /// Bindable sink for `text` property.
20 | public var text: UIBindingObserver {
21 | return UIBindingObserver(UIElement: self.base) { label, text in
22 | label.text = text
23 | }
24 | }
25 |
26 | /// Bindable sink for `attributedText` property.
27 | public var attributedText: UIBindingObserver {
28 | return UIBindingObserver(UIElement: self.base) { label, text in
29 | label.attributedText = text
30 | }
31 | }
32 |
33 | }
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | extension Reactive where Base: UINavigationItem {
18 |
19 | /// Bindable sink for `title` property.
20 | public var title: UIBindingObserver {
21 | return UIBindingObserver(UIElement: self.base) { navigationItem, text in
22 | navigationItem.title = text
23 | }
24 | }
25 |
26 | }
27 |
28 | #endif
29 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UIPageControl {
18 |
19 | /// Bindable sink for `currentPage` property.
20 | public var currentPage: UIBindingObserver {
21 | return UIBindingObserver(UIElement: self.base) { controller, page in
22 | controller.currentPage = page
23 | }
24 | }
25 | }
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/iOS/UIPickerView+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIPickerView+Rx.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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UIPickerView {
18 |
19 | /// Reactive wrapper for `delegate`.
20 | /// For more information take a look at `DelegateProxyType` protocol documentation.
21 | public var delegate: DelegateProxy {
22 | return RxPickerViewDelegateProxy.proxyForObject(base)
23 | }
24 |
25 | public var itemSelected: ControlEvent<(Int, Int)> {
26 | let source = delegate
27 | .methodInvoked(#selector(UIPickerViewDelegate.pickerView(_:didSelectRow:inComponent:)))
28 | .map {
29 | return (try castOrThrow(Int.self, $0[1]), try castOrThrow(Int.self, $0[2]))
30 | }
31 | return ControlEvent(events: source)
32 | }
33 | }
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UIProgressView {
18 |
19 | /// Bindable sink for `progress` property
20 | public var progress: UIBindingObserver {
21 | return UIBindingObserver(UIElement: self.base) { progressView, progress in
22 | progressView.progress = progress
23 | }
24 | }
25 |
26 | }
27 |
28 | #endif
29 |
--------------------------------------------------------------------------------
/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 |
18 | /// Bindable sink for `beginRefreshing()`, `endRefreshing()` methods.
19 | @available(*, deprecated, renamed: "isRefreshing")
20 | public var refreshing: UIBindingObserver {
21 | return self.isRefreshing
22 | }
23 |
24 | /// Bindable sink for `beginRefreshing()`, `endRefreshing()` methods.
25 | public var isRefreshing: UIBindingObserver {
26 | return UIBindingObserver(UIElement: self.base) { refreshControl, refresh in
27 | if refresh {
28 | refreshControl.beginRefreshing()
29 | } else {
30 | refreshControl.endRefreshing()
31 | }
32 | }
33 | }
34 |
35 | }
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/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 UIControl.rx.value(
26 | self.base,
27 | getter: { segmentedControl in
28 | segmentedControl.selectedSegmentIndex
29 | }, setter: { segmentedControl, value in
30 | segmentedControl.selectedSegmentIndex = value
31 | }
32 | )
33 | }
34 |
35 | }
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/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 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UISlider {
18 |
19 | /// Reactive wrapper for `value` property.
20 | public var value: ControlProperty {
21 | return UIControl.rx.value(
22 | self.base,
23 | getter: { slider in
24 | slider.value
25 | }, setter: { slider, value in
26 | slider.value = value
27 | }
28 | )
29 | }
30 |
31 | }
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | extension Reactive where Base: UIStepper {
18 |
19 | /// Reactive wrapper for `value` property.
20 | public var value: ControlProperty {
21 | return UIControl.rx.value(
22 | self.base,
23 | getter: { stepper in
24 | stepper.value
25 | }, setter: { stepper, value in
26 | stepper.value = value
27 | }
28 | )
29 | }
30 |
31 | }
32 |
33 | #endif
34 |
35 |
--------------------------------------------------------------------------------
/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 `UIButton`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 UIControl.rx.value(
33 | self.base,
34 | getter: { uiSwitch in
35 | uiSwitch.isOn
36 | }, setter: { uiSwitch, value in
37 | uiSwitch.isOn = value
38 | }
39 | )
40 | }
41 |
42 | }
43 |
44 | #endif
45 |
46 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | extension Reactive where Base: UITabBarItem {
18 |
19 | /// Bindable sink for `badgeValue` property.
20 | public var badgeValue: UIBindingObserver {
21 | return UIBindingObserver(UIElement: self.base) { tabBarItem, badgeValue in
22 | tabBarItem.badgeValue = badgeValue
23 | }
24 | }
25 |
26 | }
27 |
28 | #endif
29 |
--------------------------------------------------------------------------------
/Pods/RxCocoa/RxCocoa/iOS/UITextField+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UITextField+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 2/21/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import Foundation
12 | #if !RX_NO_MODULE
13 | import RxSwift
14 | #endif
15 | import UIKit
16 |
17 | extension Reactive where Base: UITextField {
18 | /// Reactive wrapper for `text` property.
19 | public var text: ControlProperty {
20 | return value
21 | }
22 |
23 | /// Reactive wrapper for `text` property.
24 | public var value: ControlProperty {
25 | return UIControl.rx.value(
26 | base,
27 | getter: { textField in
28 | textField.text
29 | }, setter: { textField, value in
30 | // This check is important because setting text value always clears control state
31 | // including marked text selection which is imporant for proper input
32 | // when IME input method is used.
33 | if textField.text != value {
34 | textField.text = value
35 | }
36 | }
37 | )
38 | }
39 |
40 | }
41 |
42 | #endif
43 |
--------------------------------------------------------------------------------
/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 Foundation
12 | import UIKit
13 | #if !RX_NO_MODULE
14 | import RxSwift
15 | #endif
16 |
17 | extension Reactive where Base: UIView {
18 | /// Bindable sink for `hidden` property.
19 | public var isHidden: UIBindingObserver {
20 | return UIBindingObserver(UIElement: self.base) { view, hidden in
21 | view.isHidden = hidden
22 | }
23 | }
24 |
25 | /// Bindable sink for `alpha` property.
26 | public var alpha: UIBindingObserver {
27 | return UIBindingObserver(UIElement: self.base) { view, alpha in
28 | view.alpha = alpha
29 | }
30 | }
31 | }
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | #if os(iOS)
12 | import UIKit
13 |
14 | #if !RX_NO_MODULE
15 | import RxSwift
16 | #endif
17 |
18 | extension Reactive where Base: UIViewController {
19 |
20 | /// Bindable sink for `title`.
21 | public var title: UIBindingObserver {
22 | return UIBindingObserver(UIElement: self.base) { viewController, title in
23 | viewController.title = title
24 | }
25 | }
26 |
27 | }
28 | #endif
29 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Sequence that repeats `repeatedValue` infinite number of times.
12 | struct InfiniteSequence : Sequence {
13 | typealias Element = E
14 | typealias Iterator = AnyIterator
15 |
16 | private let _repeatedValue: E
17 |
18 | init(repeatedValue: E) {
19 | _repeatedValue = repeatedValue
20 | }
21 |
22 | func makeIterator() -> Iterator {
23 | let repeatedValue = _repeatedValue
24 | return AnyIterator {
25 | return repeatedValue
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/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 Foundation
10 | import Dispatch
11 |
12 | extension DispatchQueue {
13 | private static var token: DispatchSpecificKey<()> = {
14 | let key = DispatchSpecificKey<()>()
15 | DispatchQueue.main.setSpecific(key: key, value: ())
16 | return key
17 | }()
18 |
19 | static var isMain: Bool {
20 | return DispatchQueue.getSpecific(key: token) != nil
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Pods/RxSwift/Platform/Platform.Darwin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Platform.Darwin.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
10 |
11 | import Darwin
12 | import Foundation
13 |
14 | typealias AtomicInt = Int32
15 |
16 | let AtomicCompareAndSwap = OSAtomicCompareAndSwap32Barrier
17 | let AtomicIncrement = OSAtomicIncrement32Barrier
18 | let AtomicDecrement = OSAtomicDecrement32Barrier
19 |
20 | extension Thread {
21 |
22 | static func setThreadLocalStorageValue(_ value: T?, forKey key: String
23 | ) {
24 | let currentThread = Thread.current
25 | let threadDictionary = currentThread.threadDictionary
26 |
27 | if let newValue = value {
28 | threadDictionary[key] = newValue
29 | }
30 | else {
31 | threadDictionary[key] = nil
32 | }
33 |
34 | }
35 | static func getThreadLocalStorageValueForKey(_ key: String) -> T? {
36 | let currentThread = Thread.current
37 | let threadDictionary = currentThread.threadDictionary
38 |
39 | return threadDictionary[key] as? T
40 | }
41 | }
42 |
43 | extension AtomicInt {
44 | func valueSnapshot() -> Int32 {
45 | return self
46 | }
47 | }
48 |
49 | #endif
50 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Represents disposable resource with state tracking.
12 | public protocol Cancelable : Disposable {
13 | /// Was resource disposed.
14 | var isDisposed: Bool { get }
15 | }
16 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol Lock {
12 | func lock()
13 | func unlock()
14 | }
15 |
16 | // https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html
17 | typealias SpinLock = NSRecursiveLock
18 |
19 | extension NSRecursiveLock : Lock {
20 | @inline(__always)
21 | func performLocked(_ action: () -> Void) {
22 | lock(); defer { unlock() }
23 | action()
24 | }
25 |
26 | @inline(__always)
27 | func calculateLocked(_ action: () -> T) -> T {
28 | lock(); defer { unlock() }
29 | return action()
30 | }
31 |
32 | @inline(__always)
33 | func calculateLockedOrFail(_ action: () throws -> T) throws -> T {
34 | lock(); defer { unlock() }
35 | let result = try action()
36 | return result
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol LockOwnerType : class, Lock {
12 | var _lock: NSRecursiveLock { get }
13 | }
14 |
15 | extension LockOwnerType {
16 | func lock() {
17 | _lock.lock()
18 | }
19 |
20 | func unlock() {
21 | _lock.unlock()
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol SynchronizedDisposeType : class, Disposable, Lock {
12 | func _synchronized_dispose()
13 | }
14 |
15 | extension SynchronizedDisposeType {
16 | func synchronizedDispose() {
17 | lock(); defer { unlock() }
18 | _synchronized_dispose()
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol SynchronizedOnType : class, ObserverType, Lock {
12 | func _synchronized_on(_ event: Event)
13 | }
14 |
15 | extension SynchronizedOnType {
16 | func synchronizedOn(_ event: Event) {
17 | lock(); defer { unlock() }
18 | _synchronized_on(event)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Concurrency/SynchronizedSubscribeType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SynchronizedSubscribeType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/25/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | protocol SynchronizedSubscribeType : class, ObservableType, Lock {
12 | func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E
13 | }
14 |
15 | extension SynchronizedSubscribeType {
16 | func synchronizedSubscribe(_ observer: O) -> Disposable where O.E == E {
17 | lock(); defer { unlock() }
18 | return _synchronized_subscribe(observer)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol SynchronizedUnsubscribeType : class {
12 | associatedtype DisposeKey
13 |
14 | func synchronizedUnsubscribe(_ disposeKey: DisposeKey)
15 | }
16 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /**
12 | Represents an observable sequence wrapper that can be connected and disconnected from its underlying observable sequence.
13 | */
14 | public protocol ConnectableObservableType : ObservableType {
15 | /**
16 | 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.
17 |
18 | - returns: Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence.
19 | */
20 | func connect() -> Disposable
21 | }
22 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Respresents a disposable resource.
12 | public protocol Disposable {
13 | /// Dispose resource.
14 | func dispose()
15 | }
16 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Represents a disposable resource that can be checked for disposal status.
12 | public final class BooleanDisposable : Disposable, Cancelable {
13 |
14 | internal static let BooleanDisposableTrue = BooleanDisposable(isDisposed: true)
15 | private var _isDisposed = false
16 |
17 | /// Initializes a new instance of the `BooleanDisposable` class
18 | public init() {
19 | }
20 |
21 | /// Initializes a new instance of the `BooleanDisposable` class with given value
22 | public init(isDisposed: Bool) {
23 | self._isDisposed = isDisposed
24 | }
25 |
26 | /// - returns: Was resource disposed.
27 | public var isDisposed: Bool {
28 | return _isDisposed
29 | }
30 |
31 | /// Sets the status to disposed, which can be observer through the `isDisposed` property.
32 | public func dispose() {
33 | _isDisposed = true
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// A collection of utility methods for common disposable operations.
12 | public struct Disposables {
13 | private init() {}
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Base class for all disposables.
12 | public class DisposeBase {
13 | init() {
14 | #if TRACE_RESOURCES
15 | let _ = Resources.incrementTotal()
16 | #endif
17 | }
18 |
19 | deinit {
20 | #if TRACE_RESOURCES
21 | let _ = Resources.decrementTotal()
22 | #endif
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Represents a disposable that does nothing on disposal.
12 | ///
13 | /// Nop = No Operation
14 | fileprivate struct NopDisposable : Disposable {
15 |
16 | fileprivate static let noOp: Disposable = NopDisposable()
17 |
18 | fileprivate init() {
19 |
20 | }
21 |
22 | /// Does nothing.
23 | public func dispose() {
24 | }
25 | }
26 |
27 | extension Disposables {
28 | /**
29 | Creates a disposable that does nothing on disposal.
30 | */
31 | static public func create() -> Disposable {
32 | return NopDisposable.noOp
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | struct SubscriptionDisposable : Disposable {
12 | private let _key: T.DisposeKey
13 | private weak var _owner: T?
14 |
15 | init(owner: T, key: T.DisposeKey) {
16 | _owner = owner
17 | _key = key
18 | }
19 |
20 | func dispose() {
21 | _owner?.synchronizedUnsubscribe(_key)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 |
12 | // MARK: forEach
13 |
14 | extension Bag where T: ObserverType {
15 | /// Dispatches `event` to app observers contained inside bag.
16 | ///
17 | /// - parameter action: Enumeration closure.
18 | func on(_ event: Event) {
19 | if _onlyFastPath {
20 | _value0?.on(event)
21 | return
22 | }
23 |
24 | let value0 = _value0
25 | let dictionary = _dictionary
26 |
27 | if let value0 = value0 {
28 | value0.on(event)
29 | }
30 |
31 | if let dictionary = dictionary {
32 | for element in dictionary.values {
33 | element.on(event)
34 | }
35 | }
36 | }
37 | }
38 |
39 | /// Dispatches `dispose` to all disposables contained inside bag.
40 | func disposeAll(in bag: Bag) {
41 | if bag._onlyFastPath {
42 | bag._value0?.dispose()
43 | return
44 | }
45 |
46 | let value0 = bag._value0
47 | let dictionary = bag._dictionary
48 |
49 | if let value0 = value0 {
50 | value0.dispose()
51 | }
52 |
53 | if let dictionary = dictionary {
54 | for element in dictionary.values {
55 | element.dispose()
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | extension String {
12 | /// This is needed because on Linux Swift doesn't have `rangeOfString(..., options: .BackwardsSearch)`
13 | func lastIndexOf(_ character: Character) -> Index? {
14 | var index = endIndex
15 | while index > startIndex {
16 | index = self.index(before: index)
17 | if self[index] == character {
18 | return index
19 | }
20 | }
21 |
22 | return nil
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// A type-erased `ObservableType`.
12 | ///
13 | /// It represents a push style sequence.
14 | public class Observable : ObservableType {
15 | /// Type of elements in sequence.
16 | public typealias E = Element
17 |
18 | init() {
19 | #if TRACE_RESOURCES
20 | let _ = Resources.incrementTotal()
21 | #endif
22 | }
23 |
24 | public func subscribe(_ observer: O) -> Disposable where O.E == E {
25 | abstractMethod()
26 | }
27 |
28 | public func asObservable() -> Observable {
29 | return self
30 | }
31 |
32 | deinit {
33 | #if TRACE_RESOURCES
34 | let _ = Resources.decrementTotal()
35 | #endif
36 | }
37 |
38 | // this is kind of ugly I know :(
39 | // Swift compiler reports "Not supported yet" when trying to override protocol extensions, so ¯\_(ツ)_/¯
40 |
41 | /// Optimizations for map operator
42 | internal func composeMap(_ selector: @escaping (Element) throws -> R) -> Observable {
43 | return Map(source: self, transform: selector)
44 | }
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Type that can be converted to observable sequence (`Observer`).
12 | public protocol ObservableConvertibleType {
13 | /// Type of elements in sequence.
14 | associatedtype E
15 |
16 | /// Converts `self` to `Observable` sequence.
17 | ///
18 | /// - returns: Observable sequence that represents `self`.
19 | func asObservable() -> Observable
20 | }
21 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Observables/Implementations/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 | import Foundation
10 |
11 | class Empty : Producer {
12 | override func subscribe(_ observer: O) -> Disposable where O.E == Element {
13 | observer.on(.completed)
14 | return Disposables.create()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Observables/Implementations/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 | import Foundation
10 |
11 | class Error : Producer {
12 | private let _error: Swift.Error
13 |
14 | init(error: Swift.Error) {
15 | _error = error
16 | }
17 |
18 | override func subscribe(_ observer: O) -> Disposable where O.E == Element {
19 | observer.on(.error(_error))
20 | return Disposables.create()
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Observables/Implementations/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 | import Foundation
10 |
11 | class Never : Producer {
12 | override func subscribe(_ observer: O) -> Disposable where O.E == Element {
13 | return Disposables.create()
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Observables/Implementations/Repeat.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Repeat.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 9/13/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | class RepeatElement : Producer {
12 | fileprivate let _element: Element
13 | fileprivate let _scheduler: ImmediateSchedulerType
14 |
15 | init(element: Element, scheduler: ImmediateSchedulerType) {
16 | _element = element
17 | _scheduler = scheduler
18 | }
19 |
20 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element {
21 | let sink = RepeatElementSink(parent: self, observer: observer, cancel: cancel)
22 | let subscription = sink.run()
23 |
24 | return (sink: sink, subscription: subscription)
25 | }
26 | }
27 |
28 | class RepeatElementSink : Sink {
29 | typealias Parent = RepeatElement
30 |
31 | private let _parent: Parent
32 |
33 | init(parent: Parent, observer: O, cancel: Cancelable) {
34 | _parent = parent
35 | super.init(observer: observer, cancel: cancel)
36 | }
37 |
38 | func run() -> Disposable {
39 | return _parent._scheduler.scheduleRecursive(_parent._element) { e, recurse in
40 | self.forwardOn(.next(e))
41 | recurse(e)
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Observables/Implementations/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 | import Foundation
10 |
11 | class StartWith: Producer {
12 | let elements: [Element]
13 | let source: Observable
14 |
15 | init(source: Observable, elements: [Element]) {
16 | self.source = source
17 | self.elements = elements
18 | super.init()
19 | }
20 |
21 | override func run(_ observer: O, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where O.E == Element {
22 | for e in elements {
23 | observer.on(.next(e))
24 | }
25 |
26 | return (sink: Disposables.create(), subscription: source.subscribe(observer))
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Observables/Observable+Debug.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Observable+Debug.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 5/2/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // MARK: debug
12 |
13 | extension ObservableType {
14 |
15 | /**
16 | Prints received events for all observers on standard output.
17 |
18 | - seealso: [do operator on reactivex.io](http://reactivex.io/documentation/operators/do.html)
19 |
20 | - parameter identifier: Identifier that is printed together with event description to standard output.
21 | - parameter trimOutput: Should output be trimmed to max 40 characters.
22 | - returns: An observable sequence whose events are printed to standard output.
23 | */
24 | public func debug(_ identifier: String? = nil, trimOutput: Bool = false, file: String = #file, line: UInt = #line, function: String = #function)
25 | -> Observable {
26 | return Debug(source: self, identifier: identifier, trimOutput: trimOutput, file: file, line: line, function: function)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Supports push-style iteration over an observable sequence.
12 | public protocol ObserverType {
13 | /// The type of elements in sequence that observer can observe.
14 | associatedtype E
15 |
16 | /// Notify observer about sequence event.
17 | ///
18 | /// - parameter event: Event that occured.
19 | func on(_ event: Event)
20 | }
21 |
22 | /// Convenience API extensions to provide alternate next, error, completed events
23 | extension ObserverType {
24 |
25 | /// Convenience method equivalent to `on(.next(element: E))`
26 | ///
27 | /// - parameter element: Next element to send to observer(s)
28 | public final func onNext(_ element: E) {
29 | on(.next(element))
30 | }
31 |
32 | /// Convenience method equivalent to `on(.completed)`
33 | public final func onCompleted() {
34 | on(.completed)
35 | }
36 |
37 | /// Convenience method equivalent to `on(.error(Swift.Error))`
38 | /// - parameter error: Swift.Error to send to observer(s)
39 | public final func onError(_ error: Swift.Error) {
40 | on(.error(error))
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | class AnonymousObserver : ObserverBase {
12 | typealias Element = ElementType
13 |
14 | typealias EventHandler = (Event) -> Void
15 |
16 | private let _eventHandler : EventHandler
17 |
18 | init(_ eventHandler: @escaping EventHandler) {
19 | #if TRACE_RESOURCES
20 | let _ = Resources.incrementTotal()
21 | #endif
22 | _eventHandler = eventHandler
23 | }
24 |
25 | override func onCore(_ event: Event) {
26 | return _eventHandler(event)
27 | }
28 |
29 | #if TRACE_RESOURCES
30 | deinit {
31 | let _ = Resources.decrementTotal()
32 | }
33 | #endif
34 | }
35 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | class ObserverBase : Disposable, ObserverType {
12 | typealias E = ElementType
13 |
14 | private var _isStopped: AtomicInt = 0
15 |
16 | func on(_ event: Event) {
17 | switch event {
18 | case .next:
19 | if _isStopped == 0 {
20 | onCore(event)
21 | }
22 | case .error, .completed:
23 |
24 | if !AtomicCompareAndSwap(0, 1, &_isStopped) {
25 | return
26 | }
27 |
28 | onCore(event)
29 | }
30 | }
31 |
32 | func onCore(_ event: Event) {
33 | abstractMethod()
34 | }
35 |
36 | func dispose() {
37 | _ = AtomicCompareAndSwap(0, 1, &_isStopped)
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Creates mutable reference wrapper for any type.
12 | class RxMutableBox : CustomDebugStringConvertible {
13 | /// Wrapped value
14 | var value : T
15 |
16 | /// Creates reference wrapper for `value`.
17 | ///
18 | /// - parameter value: Value to wrap.
19 | init (_ value: T) {
20 | self.value = value
21 | }
22 | }
23 |
24 | extension RxMutableBox {
25 | /// - returns: Box description.
26 | var debugDescription: String {
27 | return "MutatingBox(\(self.value))"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/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 Foundation
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 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Schedulers/ImmediateScheduler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImmediateScheduler.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/17/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Represents an object that schedules units of work to run immediately on the current thread.
12 | private class ImmediateScheduler : ImmediateSchedulerType {
13 |
14 | private let _asyncLock = AsyncLock()
15 |
16 | /**
17 | Schedules an action to be executed immediatelly.
18 |
19 | In case `schedule` is called recursively from inside of `action` callback, scheduled `action` will be enqueued
20 | and executed after current `action`. (`AsyncLock` behavior)
21 |
22 | - parameter state: State passed to the action to be executed.
23 | - parameter action: Action to be executed.
24 | - returns: The disposable object used to cancel the scheduled action (best effort).
25 | */
26 | func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable {
27 | let disposable = SingleAssignmentDisposable()
28 | _asyncLock.invoke(AnonymousInvocable {
29 | if disposable.isDisposed {
30 | return
31 | }
32 | disposable.setDisposable(action(state))
33 | })
34 |
35 | return disposable
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Pods/RxSwift/RxSwift/Schedulers/Internal/AnonymousInvocable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AnonymousInvocable.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 11/7/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct AnonymousInvocable : InvocableType {
12 | private let _action: () -> ()
13 |
14 | init(_ action: @escaping () -> ()) {
15 | _action = action
16 | }
17 |
18 | func invoke() {
19 | _action()
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | struct InvocableScheduledItem : InvocableType {
12 |
13 | let _invocable: I
14 | let _state: I.Value
15 |
16 | init(invocable: I, state: I.Value) {
17 | _invocable = invocable
18 | _state = state
19 | }
20 |
21 | func invoke() {
22 | _invocable.invoke(_state)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol InvocableType {
12 | func invoke()
13 | }
14 |
15 | protocol InvocableWithValueType {
16 | associatedtype Value
17 |
18 | func invoke(_ value: Value)
19 | }
20 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | struct ScheduledItem
12 | : ScheduledItemType
13 | , InvocableType {
14 | typealias Action = (T) -> Disposable
15 |
16 | private let _action: Action
17 | private let _state: T
18 |
19 | private let _disposable = SingleAssignmentDisposable()
20 |
21 | var isDisposed: Bool {
22 | return _disposable.isDisposed
23 | }
24 |
25 | init(action: @escaping Action, state: T) {
26 | _action = action
27 | _state = state
28 | }
29 |
30 | func invoke() {
31 | _disposable.setDisposable(_action(_state))
32 | }
33 |
34 | func dispose() {
35 | _disposable.dispose()
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | protocol ScheduledItemType
12 | : Cancelable
13 | , InvocableType {
14 | func invoke()
15 | }
16 |
--------------------------------------------------------------------------------
/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 | import Foundation
10 |
11 | /// Represents an object that is both an observable sequence as well as an observer.
12 | public protocol SubjectType : ObservableType {
13 | /// The type of the observer that represents this subject.
14 | ///
15 | /// Usually this type is type of subject itself, but it doesn't have to be.
16 | associatedtype SubjectObserverType : ObserverType
17 |
18 | /// Returns observer interface for subject.
19 | ///
20 | /// - returns: Observer interface for subject.
21 | func asObserver() -> SubjectObserverType
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/Pods/Swinject/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Swinject Contributors
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 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/Assembly.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Assembly.swift
3 | // Swinject
4 | //
5 | // Created by mike.owens on 12/9/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | /// The `Assembly` provides a means to organize your `Service` registration in logic groups which allows
10 | /// the user to swap out different implementations of `Services` by providing different `Assembly` instances
11 | /// to the `Assembler`
12 | public protocol Assembly {
13 |
14 | /// Provide hook for `Assembler` to load Services into the provided container
15 | ///
16 | /// - parameter container: the container provided by the `Assembler`
17 | ///
18 | func assemble(container: Container)
19 |
20 | /// Provides a hook to the `Assembly` that will be called once the `Assembler` has loaded all `Assembly`
21 | /// instances into the container.
22 | ///
23 | /// - parameter resolver: the resolver that can resolve instances from the built container
24 | ///
25 | func loaded(resolver: Resolver)
26 | }
27 |
28 | public extension Assembly {
29 | func loaded(resolver: Resolver) {
30 | // no-op
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/Container.Logging.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Container.Logging.swift
3 | // Swinject
4 | //
5 | // Created by Jakub Vaňo on 30/09/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | public typealias LoggingFunctionType = (String) -> Void
10 |
11 | public extension Container {
12 | /// Function to be used for logging debugging data.
13 | /// Default implementation writes to standard output.
14 | public static var loggingFunction: LoggingFunctionType? {
15 | get { return _loggingFunction }
16 | set { _loggingFunction = newValue }
17 | }
18 |
19 | internal static func log(_ message: String) {
20 | _loggingFunction?(message)
21 | }
22 | }
23 |
24 | private var _loggingFunction: LoggingFunctionType? = { print($0) }
25 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/FunctionType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FunctionType.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 11/28/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | // Type alias to expect a closure.
10 | internal typealias FunctionType = Any
11 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/InstanceStorage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InstanceStorage.swift
3 | // Swinject
4 | //
5 | // Created by Jakub Vaňo on 11/11/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | /// Storage provided by `ObjectScope`. It is used by `Container` to persist resolved instances.
10 | public protocol InstanceStorage: AnyObject {
11 | var instance: Any? { get set }
12 | }
13 |
14 | /// Persists stored instance until it is explicitly discarded.
15 | public final class PermanentStorage: InstanceStorage {
16 | public var instance: Any?
17 |
18 | public init() {}
19 | }
20 |
21 | /// Does not persist stored instance.
22 | public final class TransientStorage: InstanceStorage {
23 | public var instance: Any? {
24 | get { return nil }
25 | set {}
26 | }
27 |
28 | public init() {}
29 | }
30 |
31 | /// Does not persist value types.
32 | /// Persists reference types as long as there are strong references to given instance.
33 | public final class WeakStorage: InstanceStorage {
34 | private weak var object: AnyObject?
35 |
36 | #if os(Linux)
37 | public var instance: Any? {
38 | get { return object }
39 | set { object = newValue.flatMap { $0 as? AnyObject } }
40 | }
41 | #else
42 | public var instance: Any? {
43 | get { return object }
44 | set { object = newValue as AnyObject? }
45 | }
46 | #endif
47 |
48 | public init () {}
49 | }
50 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/ObjectScope.Standard.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectScope.Standard.swift
3 | // Swinject
4 | //
5 | // Created by Jakub Vaňo on 11/11/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | extension ObjectScope {
10 | /// A new instance is always created by the `Container` when a type is resolved.
11 | /// The instance is not shared.
12 | public static let transient = ObjectScope(storageFactory: TransientStorage.init, description: "transient")
13 |
14 | /// Instances are shared only when an object graph is being created,
15 | /// otherwise a new instance is created by the `Container`. This is the default scope.
16 | public static let graph = ObjectScope(storageFactory: PermanentStorage.init, description: "graph")
17 |
18 | /// An instance provided by the `Container` is shared within the `Container` and its child `Containers`.
19 | public static let container = ObjectScope(storageFactory: PermanentStorage.init, description: "container")
20 |
21 | /// An instance provided by the `Container` is shared within the `Container` and its child `Container`s
22 | /// as long as there are strong references to given instance. Otherwise new instance is created
23 | /// when resolving the type.
24 | public static let weak = ObjectScope(storageFactory: WeakStorage.init, description: "weak")
25 | }
26 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/SpinLock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SpinLock.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 11/26/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | internal final class SpinLock {
12 | private let lock = NSLock()
13 |
14 | func sync(action: () -> T) -> T {
15 | lock.lock()
16 | defer { lock.unlock() }
17 | return action()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/Swinject.h:
--------------------------------------------------------------------------------
1 | //
2 | // Swinject.h
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 7/22/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Swinject.
12 | FOUNDATION_EXPORT double SwinjectVersionNumber;
13 |
14 | //! Project version string for Swinject.
15 | FOUNDATION_EXPORT const unsigned char SwinjectVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/SynchronizedResolver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SynchronizedResolver.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 11/23/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | internal final class SynchronizedResolver {
10 | internal let container: Container
11 |
12 | internal init(container: Container) {
13 | self.container = container
14 | }
15 | }
16 |
17 | extension SynchronizedResolver: _Resolver {
18 | internal func _resolve(name: String?, option: ServiceKeyOption?, invoker: (Factory) -> Service) -> Service? {
19 | return container.lock.sync {
20 | return self.container._resolve(name: name, option: option, invoker: invoker)
21 | }
22 | }
23 | }
24 |
25 | extension SynchronizedResolver: Resolver {
26 | internal func resolve(_ serviceType: Service.Type) -> Service? {
27 | return container.lock.sync {
28 | return self.container.resolve(serviceType)
29 | }
30 | }
31 |
32 | internal func resolve(_ serviceType: Service.Type, name: String?) -> Service? {
33 | return container.lock.sync {
34 | return self.container.resolve(serviceType, name: name)
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/UnavailableItems.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnavailableItems.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 11/30/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | // MARK: For auto migration from Swinject v1 to v2.
10 | extension ObjectScope {
11 | @available(*, unavailable, renamed: "transient")
12 | public static let none = transient
13 |
14 | @available(*, unavailable, renamed: "container")
15 | public static let hierarchy = container
16 | }
17 |
18 | @available(*, unavailable, renamed: "Resolver")
19 | public protocol ResolverType { }
20 |
21 | @available(*, unavailable, renamed: "Assembly")
22 | public protocol AssemblyType { }
23 |
24 | @available(*, unavailable, renamed: "ServiceKeyOption")
25 | public protocol ServiceKeyOptionType { }
26 |
--------------------------------------------------------------------------------
/Pods/Swinject/Sources/_Resolver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // _Resolver.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 5/4/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | /// This protocol is designed for the use to extend Swinject functionality.
10 | /// Do NOT use this protocol unless you intend to write an extension or plugin to Swinject framework.
11 | ///
12 | /// A type conforming Resolver protocol must conform _Resolver protocol too.
13 | public protocol _Resolver {
14 | /// This method is designed for the use to extend Swinject functionality.
15 | /// Do NOT use this method unless you intend to write an extension or plugin to Swinject framework.
16 | ///
17 | /// - Parameter name: The registration name.
18 | /// - Parameter option: A service key option for an extension/plugin.
19 | /// - Parameter invoker: A closure to execute service resolution.
20 | ///
21 | /// - Returns: The resolved service type instance, or nil if no service is found.
22 | func _resolve(name: String?, option: ServiceKeyOption?, invoker: (Factory) -> Service) -> Service?
23 | }
24 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Swinject Contributors
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 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/Box.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Box.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 11/27/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | internal final class Box {
12 | internal let value: T
13 |
14 | internal init(_ value: T) {
15 | self.value = value
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/InjectionVerifiable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InjectionVerifiable.swift
3 | // Swinject
4 | //
5 | // Created by Jakub Vaňo on 28/10/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | internal protocol InjectionVerifiable: AnyObject {
10 | var wasInjected: Bool { get set }
11 | }
12 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/RegistrationNameAssociatable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RegistrationNameAssociatable.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 8/1/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | internal protocol RegistrationNameAssociatable: AnyObject {
10 | var swinjectRegistrationName: String? { get set }
11 | }
12 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/SwinjectStoryboard+StoryboardReference.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwinjectStoryboard+StoryboardReference.
3 | // SwinjectStoryboard
4 | //
5 | // Created by Jakub Vaňo on 01/09/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | internal extension SwinjectStoryboard {
10 |
11 | static func pushInstantiatingStoryboard(_ storyboard: SwinjectStoryboard) {
12 | storyboardStack.append(storyboard)
13 | }
14 |
15 | @discardableResult
16 | static func popInstantiatingStoryboard() -> SwinjectStoryboard? {
17 | return storyboardStack.popLast()
18 | }
19 |
20 | static var isCreatingStoryboardReference: Bool {
21 | return referencingStoryboard != nil
22 | }
23 |
24 | static var referencingStoryboard: SwinjectStoryboard? {
25 | return storyboardStack.last
26 | }
27 |
28 | static func createReferenced(name: String, bundle storyboardBundleOrNil: Bundle?) -> SwinjectStoryboard {
29 | if let container = referencingStoryboard?.container.value {
30 | return create(name: name, bundle: storyboardBundleOrNil, container: container)
31 | } else {
32 | return create(name: name, bundle: storyboardBundleOrNil)
33 | }
34 | }
35 | }
36 |
37 | private var storyboardStack = [SwinjectStoryboard]()
38 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/SwinjectStoryboard.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwinjectStoryboard.h
3 | // SwinjectStoryboard
4 | //
5 | // Created by Yoichi Tagaya on 5/5/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for SwinjectStoryboard.
12 | FOUNDATION_EXPORT double SwinjectStoryboardVersionNumber;
13 |
14 | //! Project version string for SwinjectStoryboard.
15 | FOUNDATION_EXPORT const unsigned char SwinjectStoryboardVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 | // TARGET_OS_MAC includes iOS, watchOS and tvOS, so TARGET_OS_MAC must be evaluated after them.
21 | #if TARGET_OS_IOS || TARGET_OS_TV || (!TARGET_OS_WATCH && TARGET_OS_MAC)
22 |
23 | #import
24 |
25 | #endif
26 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/SwinjectStoryboardOption.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwinjectStoryboardOption.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 2/28/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | import Swinject
10 |
11 | #if os(iOS) || os(OSX) || os(tvOS)
12 | internal struct SwinjectStoryboardOption: ServiceKeyOption {
13 | internal let controllerType: String
14 |
15 | internal init(controllerType: Container.Controller.Type) {
16 | self.controllerType = String(reflecting: controllerType)
17 | }
18 |
19 | internal func isEqualTo(_ another: ServiceKeyOption) -> Bool {
20 | guard let another = another as? SwinjectStoryboardOption else {
21 | return false
22 | }
23 |
24 | return self.controllerType == another.controllerType
25 | }
26 |
27 | internal var hashValue: Int {
28 | return controllerType.hashValue
29 | }
30 |
31 | internal var description: String {
32 | return "Storyboard: \(controllerType)"
33 | }
34 | }
35 | #endif
36 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/SwinjectStoryboardProtocol.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwinjectStoryboardProtocol.swift
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 10/12/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(OSX) || os(tvOS)
10 |
11 | // Objective-C optional protocol method is used instead of protocol extension to workaround the issue that
12 | // default implementation of a protocol method is always called if a class method conforming the protocol
13 | // is defined as an extention in a different framework.
14 | @objc
15 | public protocol SwinjectStoryboardProtocol {
16 | /// Called by Swinject framework once before SwinjectStoryboard is instantiated.
17 | ///
18 | /// - Note:
19 | /// Implement this method and setup the default container if you implicitly instantiate UIWindow
20 | /// and its root view controller from "Main" storyboard.
21 | ///
22 | /// ```swift
23 | /// extension SwinjectStoryboard {
24 | /// class func setup() {
25 | /// let container = defaultContainer
26 | /// container.register(SomeType.self) {
27 | /// _ in
28 | /// SomeClass()
29 | /// }
30 | /// container.storyboardInitCompleted(ViewController.self) {
31 | /// r, c in
32 | /// c.something = r.resolve(SomeType.self)
33 | /// }
34 | /// }
35 | /// }
36 | /// ```
37 | @objc optional static func setup()
38 | }
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/UnavailableItems.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnavailableItems.swift
3 | // SwinjectStoryboard
4 | //
5 | // Created by Yoichi Tagaya on 12/10/16.
6 | // Copyright © 2016 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | // MARK: For auto migration to Swinject v1.
10 | @available(*, unavailable, renamed: "SwinjectStoryboardProtocol")
11 | public protocol SwinjectStoryboardType { }
12 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/iOS-tvOS/_SwinjectStoryboardBase.h:
--------------------------------------------------------------------------------
1 | //
2 | // _SwinjectStoryboardBase.h
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 8/2/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | /// The base class of `SwinjectStoryboard`, which should not be used directly in your app.
12 | @interface _SwinjectStoryboardBase : UIStoryboard
13 |
14 | /// The factory method, which should not be used directly in your app.
15 | + (nonnull instancetype)_create:(nonnull NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Pods/SwinjectStoryboard/Sources/iOS-tvOS/_SwinjectStoryboardBase.m:
--------------------------------------------------------------------------------
1 | //
2 | // _SwinjectStoryboardBase.m
3 | // Swinject
4 | //
5 | // Created by Yoichi Tagaya on 8/2/15.
6 | // Copyright © 2015 Swinject Contributors. All rights reserved.
7 | //
8 |
9 | #import "_SwinjectStoryboardBase.h"
10 |
11 | @implementation _SwinjectStoryboardBase
12 |
13 | + (nonnull instancetype)_create:(nonnull NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil {
14 | return (id)[self storyboardWithName:name bundle:storyboardBundleOrNil];
15 | }
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Alamofire/Alamofire-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Alamofire : NSObject
3 | @end
4 | @implementation PodsDummy_Alamofire
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double AlamofireVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/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.3.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AlamofireImage/AlamofireImage-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_AlamofireImage : NSObject
3 | @end
4 | @implementation PodsDummy_AlamofireImage
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AlamofireImage/AlamofireImage-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AlamofireImage/AlamofireImage-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double AlamofireImageVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char AlamofireImageVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AlamofireImage/AlamofireImage.modulemap:
--------------------------------------------------------------------------------
1 | framework module AlamofireImage {
2 | umbrella header "AlamofireImage-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AlamofireImage/AlamofireImage.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/AlamofireImage
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire"
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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AlamofireImage/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.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Decodable/Decodable-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Decodable : NSObject
3 | @end
4 | @implementation PodsDummy_Decodable
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Decodable/Decodable-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Decodable/Decodable-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "Decodable.h"
6 |
7 | FOUNDATION_EXPORT double DecodableVersionNumber;
8 | FOUNDATION_EXPORT const unsigned char DecodableVersionString[];
9 |
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Decodable/Decodable.modulemap:
--------------------------------------------------------------------------------
1 | framework module Decodable {
2 | umbrella header "Decodable-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Decodable/Decodable.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Decodable
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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Decodable/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.5.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-HyperRecipe/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 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-HyperRecipe/Pods-HyperRecipe-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_HyperRecipe : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_HyperRecipe
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-HyperRecipe/Pods-HyperRecipe-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double Pods_HyperRecipeVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char Pods_HyperRecipeVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-HyperRecipe/Pods-HyperRecipe.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_HyperRecipe {
2 | umbrella header "Pods-HyperRecipe-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/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 | 3.1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/RxCocoa/RxCocoa-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_RxCocoa : NSObject
3 | @end
4 | @implementation PodsDummy_RxCocoa
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/RxCocoa/RxCocoa-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/RxCocoa/RxCocoa-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "RxCocoa.h"
6 | #import "RxCocoaRuntime.h"
7 | #import "_RX.h"
8 | #import "_RXDelegateProxy.h"
9 | #import "_RXKVOObserver.h"
10 | #import "_RXObjCRuntime.h"
11 |
12 | FOUNDATION_EXPORT double RxCocoaVersionNumber;
13 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[];
14 |
15 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/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 | 3.1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/RxSwift/RxSwift-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_RxSwift : NSObject
3 | @end
4 | @implementation PodsDummy_RxSwift
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/RxSwift/RxSwift-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/RxSwift/RxSwift-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double RxSwiftVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char RxSwiftVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Swinject/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 | 2.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Swinject/Swinject-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Swinject : NSObject
3 | @end
4 | @implementation PodsDummy_Swinject
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Swinject/Swinject-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Swinject/Swinject-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "Swinject.h"
6 |
7 | FOUNDATION_EXPORT double SwinjectVersionNumber;
8 | FOUNDATION_EXPORT const unsigned char SwinjectVersionString[];
9 |
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Swinject/Swinject.modulemap:
--------------------------------------------------------------------------------
1 | framework module Swinject {
2 | umbrella header "Swinject-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Swinject/Swinject.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Swinject
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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SwinjectStoryboard/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 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SwinjectStoryboard/SwinjectStoryboard-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_SwinjectStoryboard : NSObject
3 | @end
4 | @implementation PodsDummy_SwinjectStoryboard
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SwinjectStoryboard/SwinjectStoryboard-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SwinjectStoryboard/SwinjectStoryboard-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "_SwinjectStoryboardBase.h"
6 | #import "SwinjectStoryboard.h"
7 |
8 | FOUNDATION_EXPORT double SwinjectStoryboardVersionNumber;
9 | FOUNDATION_EXPORT const unsigned char SwinjectStoryboardVersionString[];
10 |
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SwinjectStoryboard/SwinjectStoryboard.modulemap:
--------------------------------------------------------------------------------
1 | framework module SwinjectStoryboard {
2 | umbrella header "SwinjectStoryboard-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SwinjectStoryboard/SwinjectStoryboard.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SwinjectStoryboard
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Swinject"
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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/expanding-collection/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.4
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/expanding-collection/expanding-collection-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_expanding_collection : NSObject
3 | @end
4 | @implementation PodsDummy_expanding_collection
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/expanding-collection/expanding-collection-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/expanding-collection/expanding-collection-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double expanding_collectionVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char expanding_collectionVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/expanding-collection/expanding-collection.modulemap:
--------------------------------------------------------------------------------
1 | framework module expanding_collection {
2 | umbrella header "expanding-collection-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/expanding-collection/expanding-collection.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/expanding-collection
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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/expanding-collection/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Ramotion
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 |
--------------------------------------------------------------------------------
/Pods/expanding-collection/Source/Helpers/Animations/CornerAnimatable/CornerAnimatable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CornerAnimatable.swift
3 | // TestCollectionView
4 | //
5 | // Created by Alex K. on 20/05/16.
6 | // Copyright © 2016 Alex K. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 |
12 | protocol CornerAnimatable {
13 | func animationCornerRadius(_ radius: CGFloat, duration: Double)
14 | }
15 |
16 | extension CornerAnimatable where Self: UIView {
17 |
18 | func animationCornerRadius(_ radius: CGFloat, duration: Double) {
19 | let animation = Init(CABasicAnimation(keyPath: "cornerRadius")) {
20 | $0.duration = duration
21 | $0.toValue = radius
22 | $0.fillMode = kCAFillModeForwards
23 | $0.isRemovedOnCompletion = false;
24 | }
25 |
26 | layer.add(animation, forKey: nil)
27 | }
28 | }
29 |
30 | extension UIView: CornerAnimatable {}
31 |
--------------------------------------------------------------------------------
/Pods/expanding-collection/Source/Helpers/ConfigurationHelper/ConfigurationHelper.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ConfigurationHelper.swift
3 | // TestCollectionView
4 | //
5 | // Created by Alex K. on 05/05/16.
6 | // Copyright © 2016 Alex K. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 |
12 | internal func Init(_ value : Type, block: (_ object: Type) -> Void) -> Type
13 | {
14 | block(value)
15 | return value
16 | }
17 |
--------------------------------------------------------------------------------
/Pods/expanding-collection/Source/Helpers/ScreenShot/ScreenShotHelper.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScreenShotHelper.swift
3 | // TestCollectionView
4 | //
5 | // Created by Alex K. on 11/05/16.
6 | // Copyright © 2016 Alex K. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | func takeSnapshot(_ frame: CGRect) -> UIImage? {
13 | UIGraphicsBeginImageContextWithOptions(frame.size, false, 0.0)
14 |
15 | let context = UIGraphicsGetCurrentContext();
16 | context?.translateBy(x: frame.origin.x * -1, y: frame.origin.y * -1)
17 |
18 | guard let currentContext = UIGraphicsGetCurrentContext() else {
19 | return nil
20 | }
21 |
22 | self.layer.render(in: currentContext)
23 | let image = UIGraphicsGetImageFromCurrentImageContext()
24 | UIGraphicsEndImageContext()
25 |
26 | return image
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Pods/expanding-collection/Source/Helpers/SubviewsForEach/SubviewsForEach.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SubviewsForEach.swift
3 | // DemoExpandingCollection
4 | //
5 | // Created by Alex K. on 26/05/16.
6 | // Copyright © 2016 Alex K. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol SubviewsForEach {
12 | func subviewsForEach(_ f: (UIView) -> Void)
13 | }
14 |
15 | extension SubviewsForEach where Self: UIView {
16 |
17 | func subviewsForEach(_ f: (UIView) -> Void) {
18 | forEachView(self, f: f)
19 | }
20 |
21 | fileprivate func forEachView(_ view: UIView, f: (UIView) -> Void) {
22 | view.subviews.forEach {
23 | f($0)
24 |
25 | if $0.subviews.count > 0 {
26 | forEachView($0, f: f)
27 | }
28 | }
29 | }
30 | }
31 |
32 | extension UIView: SubviewsForEach {}
33 |
--------------------------------------------------------------------------------
/README/Add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/README/Add.png
--------------------------------------------------------------------------------
/README/AppIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/README/AppIcon.png
--------------------------------------------------------------------------------
/README/Explore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/README/Explore.png
--------------------------------------------------------------------------------
/README/SplashScreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aymenworks/HyperRecipe/8c7ea75d70109c82d1734d3157e2eb37e737c130/README/SplashScreen.png
--------------------------------------------------------------------------------