├── .gitignore ├── Assets ├── PJ-02-00.png ├── PJ-02-01.png ├── PJ-02-02.png ├── PJ-02-03.png ├── PJ-02-04.png ├── PJ-02-05.png ├── PJ-02-06.png ├── PJ-03-00.png ├── PJ-03-01.png ├── PJ-03-02.png ├── PJ-03-03.png ├── PJ-04-01.png ├── PJ-04-02-01.png ├── PJ-04-02-02.png ├── PJ-04-02-03.png ├── PJ-04-02-04.gif ├── PJ-04-02.png ├── PJ-04-03-01.png ├── PJ-04-03-02.gif ├── PJ-04-03-03.png ├── PJ-04-03-04.gif ├── PJ-04-03.png ├── PJ-04-04.png ├── PJ-04-05.png ├── PJ-04-06.png ├── PJ-04-07.png ├── PJ-04-08.png ├── PJ-04-09.gif ├── PJ-04-10.png ├── PJ-04-11.gif ├── PJ-05-01.png ├── PJ-06-01.png ├── PJ-08-01.png ├── PJ-08-02.png ├── PJ-10-01.png ├── PJ-10-02-01.png ├── PJ-10-02-02.png ├── PJ-10-02-03.gif ├── PJ-10-02.png ├── PJ-10-03-01.png ├── PJ-10-03-02.png ├── PJ-10-03-03.png ├── PJ-10-03-04.png ├── PJ-10-03-05.gif ├── PJ-10-03-06.png ├── PJ-10-03-07.gif ├── PJ-10-03-08.gif ├── PJ-10-03.png ├── PJ-10-04.png ├── PJ-10-05.png ├── PJ-10-06.png ├── PJ-10-07.png ├── PJ-10-08.png ├── PJ-10-09.png ├── PJ-10-10.png ├── PJ-10-11.png ├── PJ-11-01.png ├── PJ-11-02.png ├── PJ-11-03.png ├── PJ-11-04.png └── PJ-11-05.gif ├── PJ-02-Dispatcher.md ├── PJ-03-Outlet-Catalog.md ├── PJ-04-Navigation.md ├── PJ-05-Alerts.md ├── PJ-06-CocoaPods.md ├── PJ-07-SimpleAPIClient.md ├── PJ-08-LoginForm.md ├── PJ-09-UserDefaults.md ├── PJ-10-Pokedex-P1.md ├── PJ-10-Pokedex-P2.md ├── PJ-10-Pokedex-P3.md ├── PJ-11-Databases.md ├── Playgrounds ├── P01-01-MapFilterReduce.playground │ ├── Contents.swift │ └── contents.xcplayground ├── P01-SwiftBasics.playground │ ├── Contents.swift │ └── contents.xcplayground ├── P02-Delegation.playground │ ├── Contents.swift │ └── contents.xcplayground └── P03-Tables-and-Collections.playground │ ├── Contents.swift │ └── contents.xcplayground ├── Projects ├── Alerts │ ├── Alerts.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Alerts │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── CocoaPods │ ├── CocoaPods.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── CocoaPods.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── CocoaPods │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift │ ├── Podfile │ ├── Podfile.lock │ └── Pods │ │ ├── Bugle │ │ ├── Bugle │ │ │ └── Sources │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ ├── Bugle.swift │ │ │ │ ├── BuglePiece.swift │ │ │ │ └── BugleType.swift │ │ ├── LICENSE │ │ └── README.md │ │ ├── Manifest.lock │ │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ │ └── Target Support Files │ │ ├── Bugle │ │ ├── Bugle-dummy.m │ │ ├── Bugle-prefix.pch │ │ ├── Bugle-umbrella.h │ │ ├── Bugle.modulemap │ │ └── Info.plist │ │ └── Pods-CocoaPods │ │ ├── Info.plist │ │ ├── Pods-CocoaPods-acknowledgements.markdown │ │ ├── Pods-CocoaPods-acknowledgements.plist │ │ ├── Pods-CocoaPods-dummy.m │ │ ├── Pods-CocoaPods-frameworks.sh │ │ ├── Pods-CocoaPods-resources.sh │ │ ├── Pods-CocoaPods-umbrella.h │ │ └── Pods-CocoaPods.modulemap ├── Databases │ ├── MoviesList.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── MoviesList │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── MoviesList.xcdatamodeld │ │ ├── .xccurrentversion │ │ └── MoviesList.xcdatamodel │ │ │ └── contents │ │ ├── ViewController+Data.swift │ │ ├── ViewController+Ext.swift │ │ └── ViewController.swift ├── Delegation │ ├── Delegation.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Delegation │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SongLoader.swift │ │ ├── SongLoaderResponder.swift │ │ └── ViewController.swift ├── Dispatcher │ ├── Dispatcher.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Dispatcher │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── DispatcherViewController.swift │ │ ├── Info.plist │ │ └── SecondScreenViewController.swift ├── HolaMundo │ ├── HolaMundo.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── HolaMundo │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── LoginForm │ ├── LoginForm.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── LoginForm │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── Common │ │ ├── Controllers │ │ │ └── DataTableViewController.swift │ │ ├── Data │ │ │ ├── AppDataSource.swift │ │ │ ├── AppParser.swift │ │ │ ├── DataSource.swift │ │ │ └── Parser.swift │ │ ├── Decorators │ │ │ ├── AppCellDecorator.swift │ │ │ └── CellDecorator.swift │ │ ├── Navigation │ │ │ └── UIViewController+Navigation.swift │ │ └── ViewPresenter │ │ │ ├── BaseView.swift │ │ │ ├── BaseViewController.swift │ │ │ └── BaseViewControllerIndicator.swift │ │ ├── Data │ │ ├── Local │ │ │ ├── LocalKeys.swift │ │ │ ├── Managers │ │ │ │ └── DispatchManager.swift │ │ │ └── Protocols │ │ │ │ └── DispatchManagerProtocol.swift │ │ └── Remote │ │ │ ├── PokemonsParser.swift │ │ │ └── PokemonsService.swift │ │ ├── Decorators │ │ └── SimplePokemonCellDecorator.swift │ │ ├── Domain │ │ ├── Pokemon.swift │ │ └── SimplePokemon.swift │ │ ├── Info.plist │ │ └── Presentation │ │ ├── Dispatch │ │ ├── Dispatch.storyboard │ │ └── DispatchViewController.swift │ │ ├── Login │ │ ├── Login.storyboard │ │ ├── LoginContract.swift │ │ ├── LoginPresenter.swift │ │ └── LoginViewController.swift │ │ └── Pokemons │ │ ├── Pokemons.storyboard │ │ └── PokemonsTableViewController.swift ├── Navigation │ ├── Navigation.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Navigation │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── Common │ │ └── UIViewController+Navigation.swift │ │ ├── Dispatch │ │ ├── Base.lproj │ │ │ └── Dispatch.storyboard │ │ └── DispatchViewController.swift │ │ ├── HubSpoke │ │ └── HubSpoke.storyboard │ │ ├── Info.plist │ │ ├── NestedDoll │ │ ├── CameraTableViewController.swift │ │ ├── GeneralTableViewController.swift │ │ ├── NestedDoll.storyboard │ │ └── SettingsTableViewController.swift │ │ └── TabbedView │ │ └── TabbedView.storyboard ├── OutletCatalog │ ├── OutletCatalog.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── OutletCatalog │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Pokedex │ ├── .gitignore │ ├── 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 │ │ ├── Bugle │ │ │ ├── Bugle │ │ │ │ └── Sources │ │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ │ ├── Bugle.swift │ │ │ │ │ ├── BuglePiece.swift │ │ │ │ │ └── BugleType.swift │ │ │ ├── LICENSE │ │ │ └── README.md │ │ ├── Manifest.lock │ │ ├── Pods.xcodeproj │ │ │ └── project.pbxproj │ │ ├── SDWebImage │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── SDWebImage │ │ │ │ ├── NSButton+WebCache.h │ │ │ │ ├── NSButton+WebCache.m │ │ │ │ ├── NSData+ImageContentType.h │ │ │ │ ├── NSData+ImageContentType.m │ │ │ │ ├── NSImage+WebCache.h │ │ │ │ ├── NSImage+WebCache.m │ │ │ │ ├── SDAnimatedImageRep.h │ │ │ │ ├── SDAnimatedImageRep.m │ │ │ │ ├── SDImageCache.h │ │ │ │ ├── SDImageCache.m │ │ │ │ ├── SDImageCacheConfig.h │ │ │ │ ├── SDImageCacheConfig.m │ │ │ │ ├── SDWebImageCoder.h │ │ │ │ ├── SDWebImageCoder.m │ │ │ │ ├── SDWebImageCoderHelper.h │ │ │ │ ├── SDWebImageCoderHelper.m │ │ │ │ ├── SDWebImageCodersManager.h │ │ │ │ ├── SDWebImageCodersManager.m │ │ │ │ ├── SDWebImageCompat.h │ │ │ │ ├── SDWebImageCompat.m │ │ │ │ ├── SDWebImageDownloader.h │ │ │ │ ├── SDWebImageDownloader.m │ │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ │ ├── SDWebImageFrame.h │ │ │ │ ├── SDWebImageFrame.m │ │ │ │ ├── SDWebImageGIFCoder.h │ │ │ │ ├── SDWebImageGIFCoder.m │ │ │ │ ├── SDWebImageImageIOCoder.h │ │ │ │ ├── SDWebImageImageIOCoder.m │ │ │ │ ├── SDWebImageManager.h │ │ │ │ ├── SDWebImageManager.m │ │ │ │ ├── SDWebImageOperation.h │ │ │ │ ├── SDWebImagePrefetcher.h │ │ │ │ ├── SDWebImagePrefetcher.m │ │ │ │ ├── SDWebImageTransition.h │ │ │ │ ├── SDWebImageTransition.m │ │ │ │ ├── UIButton+WebCache.h │ │ │ │ ├── UIButton+WebCache.m │ │ │ │ ├── UIImage+ForceDecode.h │ │ │ │ ├── UIImage+ForceDecode.m │ │ │ │ ├── UIImage+GIF.h │ │ │ │ ├── UIImage+GIF.m │ │ │ │ ├── UIImage+MultiFormat.h │ │ │ │ ├── UIImage+MultiFormat.m │ │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ │ ├── UIImageView+WebCache.h │ │ │ │ ├── UIImageView+WebCache.m │ │ │ │ ├── UIView+WebCache.h │ │ │ │ ├── UIView+WebCache.m │ │ │ │ ├── UIView+WebCacheOperation.h │ │ │ │ └── UIView+WebCacheOperation.m │ │ └── Target Support Files │ │ │ ├── Alamofire │ │ │ ├── Alamofire-dummy.m │ │ │ ├── Alamofire-prefix.pch │ │ │ ├── Alamofire-umbrella.h │ │ │ ├── Alamofire.modulemap │ │ │ └── Info.plist │ │ │ ├── Bugle │ │ │ ├── Bugle-dummy.m │ │ │ ├── Bugle-prefix.pch │ │ │ ├── Bugle-umbrella.h │ │ │ ├── Bugle.modulemap │ │ │ └── Info.plist │ │ │ ├── Pods-Pokedex │ │ │ ├── Info.plist │ │ │ ├── Pods-Pokedex-acknowledgements.markdown │ │ │ ├── Pods-Pokedex-acknowledgements.plist │ │ │ ├── Pods-Pokedex-dummy.m │ │ │ ├── Pods-Pokedex-frameworks.sh │ │ │ ├── Pods-Pokedex-resources.sh │ │ │ ├── Pods-Pokedex-umbrella.h │ │ │ └── Pods-Pokedex.modulemap │ │ │ └── SDWebImage │ │ │ ├── Info.plist │ │ │ ├── SDWebImage-dummy.m │ │ │ ├── SDWebImage-prefix.pch │ │ │ ├── SDWebImage-umbrella.h │ │ │ └── SDWebImage.modulemap │ ├── Pokedex.xcodeproj │ │ └── project.pbxproj │ ├── Pokedex.xcworkspace │ │ └── contents.xcworkspacedata │ └── Pokedex │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── black.colorset │ │ │ └── Contents.json │ │ ├── bluish.colorset │ │ │ └── Contents.json │ │ ├── booger.colorset │ │ │ └── Contents.json │ │ ├── brick.colorset │ │ │ └── Contents.json │ │ ├── coolGrey.colorset │ │ │ └── Contents.json │ │ ├── dullOrange.colorset │ │ │ └── Contents.json │ │ ├── dustyLavender.colorset │ │ │ └── Contents.json │ │ ├── frenchBlue.colorset │ │ │ └── Contents.json │ │ ├── lightEggplant.colorset │ │ │ └── Contents.json │ │ ├── logo.imageset │ │ │ ├── Contents.json │ │ │ ├── bitmap.png │ │ │ ├── bitmap@2x.png │ │ │ └── bitmap@3x.png │ │ ├── maize.colorset │ │ │ └── Contents.json │ │ ├── purpleishBlue.colorset │ │ │ └── Contents.json │ │ ├── roundedbutton.imageset │ │ │ ├── Contents.json │ │ │ ├── rectangle2.png │ │ │ ├── rectangle2@2x.png │ │ │ └── rectangle2@3x.png │ │ ├── slateGrey.colorset │ │ │ └── Contents.json │ │ ├── softBlue.colorset │ │ │ └── Contents.json │ │ ├── steelGrey.colorset │ │ │ └── Contents.json │ │ ├── textColor.colorset │ │ │ └── Contents.json │ │ ├── turtleGreen.colorset │ │ │ └── Contents.json │ │ ├── twilight.colorset │ │ │ └── Contents.json │ │ ├── vermillion.colorset │ │ │ └── Contents.json │ │ ├── white.colorset │ │ │ └── Contents.json │ │ └── windowsBlue.colorset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── Common │ │ ├── Controllers │ │ │ └── DataTableViewController.swift │ │ ├── Data │ │ │ ├── AppDataSource.swift │ │ │ ├── AppParser.swift │ │ │ ├── DataSource.swift │ │ │ └── Parser.swift │ │ ├── Decorators │ │ │ ├── AppCellDecorator.swift │ │ │ └── CellDecorator.swift │ │ ├── Extensions │ │ │ ├── String+Ext.swift │ │ │ ├── UIColor+Additions.swift │ │ │ ├── UIView+Animations.swift │ │ │ └── UIViewController+Positions.swift │ │ ├── Navigation │ │ │ └── UIViewController+Navigation.swift │ │ └── ViewPresenter │ │ │ ├── BaseView.swift │ │ │ ├── BaseViewController.swift │ │ │ └── BaseViewControllerIndicator.swift │ │ ├── Data │ │ ├── Local │ │ │ ├── LocelKeys.swift │ │ │ ├── Managers │ │ │ │ └── SessionManager.swift │ │ │ └── Protocols │ │ │ │ └── SessionManagerProtocol.swift │ │ └── Remote │ │ │ ├── PokemonsParser.swift │ │ │ └── PokemonsService.swift │ │ ├── Decorators │ │ ├── PokemonCollectionCellDecorator.swift │ │ └── SimplePokemonCellDecorator.swift │ │ ├── Domain │ │ ├── Pokemon.swift │ │ ├── Session.swift │ │ └── SimplePokemon.swift │ │ ├── Info.plist │ │ └── Presentation │ │ ├── Pokemons │ │ ├── Cell │ │ │ ├── PokemonCollectionViewCell.swift │ │ │ └── PokemonCollectionViewCell.xib │ │ ├── Pokemons.storyboard │ │ └── PokemonsViewController.swift │ │ └── Welcome │ │ ├── Welcome.storyboard │ │ ├── WelcomeContract.swift │ │ ├── WelcomePresenter.swift │ │ └── WelcomeViewController.swift ├── PokedexP2 │ ├── .gitignore │ ├── 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 │ │ ├── Bugle │ │ │ ├── Bugle │ │ │ │ └── Sources │ │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ │ ├── Bugle.swift │ │ │ │ │ ├── BuglePiece.swift │ │ │ │ │ └── BugleType.swift │ │ │ ├── LICENSE │ │ │ └── README.md │ │ ├── Manifest.lock │ │ ├── Pods.xcodeproj │ │ │ └── project.pbxproj │ │ ├── SDWebImage │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── SDWebImage │ │ │ │ ├── NSButton+WebCache.h │ │ │ │ ├── NSButton+WebCache.m │ │ │ │ ├── NSData+ImageContentType.h │ │ │ │ ├── NSData+ImageContentType.m │ │ │ │ ├── NSImage+WebCache.h │ │ │ │ ├── NSImage+WebCache.m │ │ │ │ ├── SDAnimatedImageRep.h │ │ │ │ ├── SDAnimatedImageRep.m │ │ │ │ ├── SDImageCache.h │ │ │ │ ├── SDImageCache.m │ │ │ │ ├── SDImageCacheConfig.h │ │ │ │ ├── SDImageCacheConfig.m │ │ │ │ ├── SDWebImageCoder.h │ │ │ │ ├── SDWebImageCoder.m │ │ │ │ ├── SDWebImageCoderHelper.h │ │ │ │ ├── SDWebImageCoderHelper.m │ │ │ │ ├── SDWebImageCodersManager.h │ │ │ │ ├── SDWebImageCodersManager.m │ │ │ │ ├── SDWebImageCompat.h │ │ │ │ ├── SDWebImageCompat.m │ │ │ │ ├── SDWebImageDownloader.h │ │ │ │ ├── SDWebImageDownloader.m │ │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ │ ├── SDWebImageFrame.h │ │ │ │ ├── SDWebImageFrame.m │ │ │ │ ├── SDWebImageGIFCoder.h │ │ │ │ ├── SDWebImageGIFCoder.m │ │ │ │ ├── SDWebImageImageIOCoder.h │ │ │ │ ├── SDWebImageImageIOCoder.m │ │ │ │ ├── SDWebImageManager.h │ │ │ │ ├── SDWebImageManager.m │ │ │ │ ├── SDWebImageOperation.h │ │ │ │ ├── SDWebImagePrefetcher.h │ │ │ │ ├── SDWebImagePrefetcher.m │ │ │ │ ├── SDWebImageTransition.h │ │ │ │ ├── SDWebImageTransition.m │ │ │ │ ├── UIButton+WebCache.h │ │ │ │ ├── UIButton+WebCache.m │ │ │ │ ├── UIImage+ForceDecode.h │ │ │ │ ├── UIImage+ForceDecode.m │ │ │ │ ├── UIImage+GIF.h │ │ │ │ ├── UIImage+GIF.m │ │ │ │ ├── UIImage+MultiFormat.h │ │ │ │ ├── UIImage+MultiFormat.m │ │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ │ ├── UIImageView+WebCache.h │ │ │ │ ├── UIImageView+WebCache.m │ │ │ │ ├── UIView+WebCache.h │ │ │ │ ├── UIView+WebCache.m │ │ │ │ ├── UIView+WebCacheOperation.h │ │ │ │ └── UIView+WebCacheOperation.m │ │ └── Target Support Files │ │ │ ├── Alamofire │ │ │ ├── Alamofire-dummy.m │ │ │ ├── Alamofire-prefix.pch │ │ │ ├── Alamofire-umbrella.h │ │ │ ├── Alamofire.modulemap │ │ │ └── Info.plist │ │ │ ├── Bugle │ │ │ ├── Bugle-dummy.m │ │ │ ├── Bugle-prefix.pch │ │ │ ├── Bugle-umbrella.h │ │ │ ├── Bugle.modulemap │ │ │ └── Info.plist │ │ │ ├── Pods-Pokedex │ │ │ ├── Info.plist │ │ │ ├── Pods-Pokedex-acknowledgements.markdown │ │ │ ├── Pods-Pokedex-acknowledgements.plist │ │ │ ├── Pods-Pokedex-dummy.m │ │ │ ├── Pods-Pokedex-frameworks.sh │ │ │ ├── Pods-Pokedex-resources.sh │ │ │ ├── Pods-Pokedex-umbrella.h │ │ │ └── Pods-Pokedex.modulemap │ │ │ └── SDWebImage │ │ │ ├── Info.plist │ │ │ ├── SDWebImage-dummy.m │ │ │ ├── SDWebImage-prefix.pch │ │ │ ├── SDWebImage-umbrella.h │ │ │ └── SDWebImage.modulemap │ ├── Pokedex.xcodeproj │ │ └── project.pbxproj │ ├── Pokedex.xcworkspace │ │ └── contents.xcworkspacedata │ └── Pokedex │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── black.colorset │ │ │ └── Contents.json │ │ ├── bluish.colorset │ │ │ └── Contents.json │ │ ├── booger.colorset │ │ │ └── Contents.json │ │ ├── brick.colorset │ │ │ └── Contents.json │ │ ├── coolGrey.colorset │ │ │ └── Contents.json │ │ ├── dullOrange.colorset │ │ │ └── Contents.json │ │ ├── dustyLavender.colorset │ │ │ └── Contents.json │ │ ├── frenchBlue.colorset │ │ │ └── Contents.json │ │ ├── lightEggplant.colorset │ │ │ └── Contents.json │ │ ├── maize.colorset │ │ │ └── Contents.json │ │ ├── pokedex.imageset │ │ │ ├── Contents.json │ │ │ ├── bitmap.png │ │ │ ├── bitmap@2x.png │ │ │ └── bitmap@3x.png │ │ ├── purpleishBlue.colorset │ │ │ └── Contents.json │ │ ├── roundedbutton.imageset │ │ │ ├── Contents.json │ │ │ ├── rectangle2.png │ │ │ ├── rectangle2@2x.png │ │ │ └── rectangle2@3x.png │ │ ├── slateGrey.colorset │ │ │ └── Contents.json │ │ ├── softBlue.colorset │ │ │ └── Contents.json │ │ ├── steelGrey.colorset │ │ │ └── Contents.json │ │ ├── textColor.colorset │ │ │ └── Contents.json │ │ ├── turtleGreen.colorset │ │ │ └── Contents.json │ │ ├── twilight.colorset │ │ │ └── Contents.json │ │ ├── vermillion.colorset │ │ │ └── Contents.json │ │ ├── white.colorset │ │ │ └── Contents.json │ │ └── windowsBlue.colorset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── Common │ │ ├── Controllers │ │ │ └── DataTableViewController.swift │ │ ├── Data │ │ │ ├── AppDataSource.swift │ │ │ ├── AppParser.swift │ │ │ ├── DataSource.swift │ │ │ └── Parser.swift │ │ ├── Decorators │ │ │ ├── AppCellDecorator.swift │ │ │ └── CellDecorator.swift │ │ ├── Extensions │ │ │ ├── String+Ext.swift │ │ │ ├── String+Formatter.swift │ │ │ ├── UIColor+Additions.swift │ │ │ ├── UIImageView+Ext.swift │ │ │ ├── UIView+Animations.swift │ │ │ └── UIViewController+Positions.swift │ │ ├── Navigation │ │ │ └── UIViewController+Navigation.swift │ │ └── ViewPresenter │ │ │ ├── BaseView.swift │ │ │ ├── BaseViewController.swift │ │ │ └── BaseViewControllerIndicator.swift │ │ ├── Data │ │ ├── Local │ │ │ ├── LocelKeys.swift │ │ │ ├── Managers │ │ │ │ └── SessionManager.swift │ │ │ └── Protocols │ │ │ │ └── SessionManagerProtocol.swift │ │ └── Remote │ │ │ ├── PokemonsParser.swift │ │ │ └── PokemonsService.swift │ │ ├── Decorators │ │ ├── PokemonCollectionCellDecorator.swift │ │ └── SimplePokemonCellDecorator.swift │ │ ├── Domain │ │ ├── Pokemon.swift │ │ ├── PokemonType.swift │ │ ├── Session.swift │ │ └── SimplePokemon.swift │ │ ├── Info.plist │ │ └── Presentation │ │ ├── Pokemons │ │ ├── Cell │ │ │ ├── PokemonCollectionViewCell.swift │ │ │ └── PokemonCollectionViewCell.xib │ │ ├── Pokemons.storyboard │ │ └── PokemonsViewController.swift │ │ └── Welcome │ │ ├── Welcome.storyboard │ │ ├── WelcomeContract.swift │ │ ├── WelcomePresenter.swift │ │ └── WelcomeViewController.swift ├── PokedexP3 │ ├── .gitignore │ ├── 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 │ │ ├── Bugle │ │ │ ├── Bugle │ │ │ │ └── Sources │ │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ │ ├── Bugle.swift │ │ │ │ │ ├── BuglePiece.swift │ │ │ │ │ └── BugleType.swift │ │ │ ├── LICENSE │ │ │ └── README.md │ │ ├── Manifest.lock │ │ ├── Pods.xcodeproj │ │ │ └── project.pbxproj │ │ ├── SDWebImage │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── SDWebImage │ │ │ │ ├── NSButton+WebCache.h │ │ │ │ ├── NSButton+WebCache.m │ │ │ │ ├── NSData+ImageContentType.h │ │ │ │ ├── NSData+ImageContentType.m │ │ │ │ ├── NSImage+WebCache.h │ │ │ │ ├── NSImage+WebCache.m │ │ │ │ ├── SDAnimatedImageRep.h │ │ │ │ ├── SDAnimatedImageRep.m │ │ │ │ ├── SDImageCache.h │ │ │ │ ├── SDImageCache.m │ │ │ │ ├── SDImageCacheConfig.h │ │ │ │ ├── SDImageCacheConfig.m │ │ │ │ ├── SDWebImageCoder.h │ │ │ │ ├── SDWebImageCoder.m │ │ │ │ ├── SDWebImageCoderHelper.h │ │ │ │ ├── SDWebImageCoderHelper.m │ │ │ │ ├── SDWebImageCodersManager.h │ │ │ │ ├── SDWebImageCodersManager.m │ │ │ │ ├── SDWebImageCompat.h │ │ │ │ ├── SDWebImageCompat.m │ │ │ │ ├── SDWebImageDownloader.h │ │ │ │ ├── SDWebImageDownloader.m │ │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ │ ├── SDWebImageFrame.h │ │ │ │ ├── SDWebImageFrame.m │ │ │ │ ├── SDWebImageGIFCoder.h │ │ │ │ ├── SDWebImageGIFCoder.m │ │ │ │ ├── SDWebImageImageIOCoder.h │ │ │ │ ├── SDWebImageImageIOCoder.m │ │ │ │ ├── SDWebImageManager.h │ │ │ │ ├── SDWebImageManager.m │ │ │ │ ├── SDWebImageOperation.h │ │ │ │ ├── SDWebImagePrefetcher.h │ │ │ │ ├── SDWebImagePrefetcher.m │ │ │ │ ├── SDWebImageTransition.h │ │ │ │ ├── SDWebImageTransition.m │ │ │ │ ├── UIButton+WebCache.h │ │ │ │ ├── UIButton+WebCache.m │ │ │ │ ├── UIImage+ForceDecode.h │ │ │ │ ├── UIImage+ForceDecode.m │ │ │ │ ├── UIImage+GIF.h │ │ │ │ ├── UIImage+GIF.m │ │ │ │ ├── UIImage+MultiFormat.h │ │ │ │ ├── UIImage+MultiFormat.m │ │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ │ ├── UIImageView+WebCache.h │ │ │ │ ├── UIImageView+WebCache.m │ │ │ │ ├── UIView+WebCache.h │ │ │ │ ├── UIView+WebCache.m │ │ │ │ ├── UIView+WebCacheOperation.h │ │ │ │ └── UIView+WebCacheOperation.m │ │ └── Target Support Files │ │ │ ├── Alamofire │ │ │ ├── Alamofire-dummy.m │ │ │ ├── Alamofire-prefix.pch │ │ │ ├── Alamofire-umbrella.h │ │ │ ├── Alamofire.modulemap │ │ │ └── Info.plist │ │ │ ├── Bugle │ │ │ ├── Bugle-dummy.m │ │ │ ├── Bugle-prefix.pch │ │ │ ├── Bugle-umbrella.h │ │ │ ├── Bugle.modulemap │ │ │ └── Info.plist │ │ │ ├── Pods-Pokedex │ │ │ ├── Info.plist │ │ │ ├── Pods-Pokedex-acknowledgements.markdown │ │ │ ├── Pods-Pokedex-acknowledgements.plist │ │ │ ├── Pods-Pokedex-dummy.m │ │ │ ├── Pods-Pokedex-frameworks.sh │ │ │ ├── Pods-Pokedex-resources.sh │ │ │ ├── Pods-Pokedex-umbrella.h │ │ │ └── Pods-Pokedex.modulemap │ │ │ └── SDWebImage │ │ │ ├── Info.plist │ │ │ ├── SDWebImage-dummy.m │ │ │ ├── SDWebImage-prefix.pch │ │ │ ├── SDWebImage-umbrella.h │ │ │ └── SDWebImage.modulemap │ ├── Pokedex.xcodeproj │ │ └── project.pbxproj │ ├── Pokedex.xcworkspace │ │ └── contents.xcworkspacedata │ └── Pokedex │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── black.colorset │ │ │ └── Contents.json │ │ ├── bluish.colorset │ │ │ └── Contents.json │ │ ├── booger.colorset │ │ │ └── Contents.json │ │ ├── brick.colorset │ │ │ └── Contents.json │ │ ├── coolGrey.colorset │ │ │ └── Contents.json │ │ ├── dullOrange.colorset │ │ │ └── Contents.json │ │ ├── dustyLavender.colorset │ │ │ └── Contents.json │ │ ├── filter.imageset │ │ │ ├── Contents.json │ │ │ ├── ifFilter1608702.png │ │ │ ├── ifFilter1608702@2x.png │ │ │ └── ifFilter1608702@3x.png │ │ ├── frenchBlue.colorset │ │ │ └── Contents.json │ │ ├── lightEggplant.colorset │ │ │ └── Contents.json │ │ ├── maize.colorset │ │ │ └── Contents.json │ │ ├── pokedex.imageset │ │ │ ├── Contents.json │ │ │ ├── bitmap.png │ │ │ ├── bitmap@2x.png │ │ │ └── bitmap@3x.png │ │ ├── purpleishBlue.colorset │ │ │ └── Contents.json │ │ ├── roundedbutton.imageset │ │ │ ├── Contents.json │ │ │ ├── rectangle2.png │ │ │ ├── rectangle2@2x.png │ │ │ └── rectangle2@3x.png │ │ ├── slateGrey.colorset │ │ │ └── Contents.json │ │ ├── softBlue.colorset │ │ │ └── Contents.json │ │ ├── steelGrey.colorset │ │ │ └── Contents.json │ │ ├── textColor.colorset │ │ │ └── Contents.json │ │ ├── turtleGreen.colorset │ │ │ └── Contents.json │ │ ├── twilight.colorset │ │ │ └── Contents.json │ │ ├── vermillion.colorset │ │ │ └── Contents.json │ │ ├── white.colorset │ │ │ └── Contents.json │ │ └── windowsBlue.colorset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── Common │ │ ├── Controllers │ │ │ └── DataTableViewController.swift │ │ ├── Data │ │ │ ├── AppDataSource.swift │ │ │ ├── AppParser.swift │ │ │ ├── DataSource.swift │ │ │ └── Parser.swift │ │ ├── Decorators │ │ │ ├── AppCellDecorator.swift │ │ │ └── CellDecorator.swift │ │ ├── Extensions │ │ │ ├── String+Ext.swift │ │ │ ├── String+Formatter.swift │ │ │ ├── UIColor+Additions.swift │ │ │ ├── UIImageView+Ext.swift │ │ │ ├── UIView+Animations.swift │ │ │ └── UIViewController+Positions.swift │ │ ├── Navigation │ │ │ └── UIViewController+Navigation.swift │ │ └── ViewPresenter │ │ │ ├── BaseView.swift │ │ │ ├── BaseViewController.swift │ │ │ └── BaseViewControllerIndicator.swift │ │ ├── Data │ │ ├── Local │ │ │ ├── LocelKeys.swift │ │ │ ├── Managers │ │ │ │ └── SessionManager.swift │ │ │ └── Protocols │ │ │ │ └── SessionManagerProtocol.swift │ │ └── Remote │ │ │ ├── PokemonsParser.swift │ │ │ └── PokemonsService.swift │ │ ├── Decorators │ │ ├── PokemonCollectionCellDecorator.swift │ │ ├── SimplePokemonCellDecorator.swift │ │ └── TypeTableCellDecorator.swift │ │ ├── Domain │ │ ├── Pokemon.swift │ │ ├── PokemonType.swift │ │ ├── Session.swift │ │ └── SimplePokemon.swift │ │ ├── Info.plist │ │ └── Presentation │ │ ├── Pokemons │ │ ├── Cell │ │ │ ├── PokemonCollectionViewCell.swift │ │ │ └── PokemonCollectionViewCell.xib │ │ ├── Pokemons.storyboard │ │ └── PokemonsViewController.swift │ │ ├── Types │ │ ├── Cell │ │ │ ├── TypeTableViewCell.swift │ │ │ └── TypeTableViewCell.xib │ │ ├── Types.storyboard │ │ └── TypesViewController.swift │ │ └── Welcome │ │ ├── Welcome.storyboard │ │ ├── WelcomeContract.swift │ │ ├── WelcomePresenter.swift │ │ └── WelcomeViewController.swift ├── SimpleAPIClient │ ├── SimpleAPIClient.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── SimpleAPIClient │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── DataHelper.swift │ │ ├── DataSource.swift │ │ ├── Parser.swift │ │ └── PokemonsParser.swift │ │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ ├── CellDecorator.swift │ │ └── SimplePokemonCellDecorator.swift │ │ ├── Domain │ │ ├── Pokemon.swift │ │ └── SimplePokemon.swift │ │ ├── Info.plist │ │ └── Presentation │ │ ├── BaseViewControllerIndicator.swift │ │ ├── DataTableViewController.swift │ │ └── PokemonsTableViewController.swift ├── TableView │ ├── TableView.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── TableView │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Data │ │ ├── DataHelper.swift │ │ ├── DataSource.swift │ │ └── MoviesDataSource.swift │ │ ├── Decorators │ │ ├── EmojiMovieCellDecorator.swift │ │ ├── MovieCellDecorator.swift │ │ └── SimpleMovieCellDecorator.swift │ │ ├── Domain │ │ ├── EmojiMovieRepresentation.swift │ │ ├── Movie.swift │ │ └── SimpleMovie.swift │ │ ├── Extensions │ │ └── UIViewController+Ext.swift │ │ ├── Info.plist │ │ └── Movies │ │ ├── DetailViewController.swift │ │ └── MasterViewController.swift └── UserDefaults │ ├── UserDefaults.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── UserDefaults │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ ├── Navigation │ │ └── UIViewController+Navigation.swift │ └── ViewPresenter │ │ ├── BaseView.swift │ │ ├── BaseViewController.swift │ │ └── BaseViewControllerIndicator.swift │ ├── Data │ ├── Local │ │ ├── LocelKeys.swift │ │ ├── Managers │ │ │ ├── DispatchManager.swift │ │ │ └── SessionManager.swift │ │ └── Protocols │ │ │ ├── DispatchManagerProtocol.swift │ │ │ └── SessionManagerProtocol.swift │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ ├── Session.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Dispatch │ ├── Dispatch.storyboard │ └── DispatchViewController.swift │ ├── Login │ ├── Login.storyboard │ ├── LoginContract.swift │ ├── LoginPresenter.swift │ └── LoginViewController.swift │ └── Pokemons │ ├── Pokemons.storyboard │ └── PokemonsTableViewController.swift ├── README.md └── Starters ├── .gitkeep ├── Alerts ├── Alerts.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Alerts │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── CocoaPods ├── CocoaPods.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── CocoaPods │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── Delegation ├── Delegation.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Delegation │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── SongLoader.swift │ ├── SongLoaderResponder.swift │ └── ViewController.swift ├── LoginForm ├── LoginForm.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── LoginForm │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── BaseViewControllerIndicator.swift │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ └── Navigation │ │ └── UIViewController+Navigation.swift │ ├── Data │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Dispatch │ ├── Dispatch.storyboard │ └── DispatchViewController.swift │ ├── Login │ └── LoginViewController.swift │ └── Pokemons │ ├── Base.lproj │ └── Pokemons.storyboard │ └── PokemonsTableViewController.swift ├── LoginFormP2 ├── LoginForm.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── LoginForm │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ ├── Navigation │ │ └── UIViewController+Navigation.swift │ └── ViewPresenter │ │ ├── BaseView.swift │ │ ├── BaseViewController.swift │ │ └── BaseViewControllerIndicator.swift │ ├── Data │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Dispatch │ ├── Dispatch.storyboard │ └── DispatchViewController.swift │ ├── Login │ ├── Login.storyboard │ ├── LoginContract.swift │ ├── LoginPresenter.swift │ └── LoginViewController.swift │ └── Pokemons │ ├── Pokemons.storyboard │ └── PokemonsTableViewController.swift ├── LoginFormP3 ├── LoginForm.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── LoginForm │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── BaseViewControllerIndicator.swift │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ └── Navigation │ │ └── UIViewController+Navigation.swift │ ├── Data │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Dispatch │ ├── Dispatch.storyboard │ └── DispatchViewController.swift │ ├── Login │ ├── Login.storyboard │ ├── LoginContract.swift │ ├── LoginPresenter.swift │ └── LoginViewController.swift │ └── Pokemons │ ├── Pokemons.storyboard │ └── PokemonsTableViewController.swift ├── NavigationP1 ├── Navigation.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Navigation │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ └── UIViewController+Navigation.swift │ ├── Dispatch │ ├── Base.lproj │ │ └── Dispatch.storyboard │ └── DispatchViewController.swift │ ├── HubSpoke │ └── HubSpoke.storyboard │ ├── Info.plist │ ├── NestedDoll │ └── NestedDoll.storyboard │ └── TabbedView │ └── TabbedView.storyboard ├── NavigationP2 ├── Navigation.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Navigation │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ └── UIViewController+Navigation.swift │ ├── Dispatch │ ├── Base.lproj │ │ └── Dispatch.storyboard │ └── DispatchViewController.swift │ ├── HubSpoke │ └── HubSpoke.storyboard │ ├── Info.plist │ ├── NestedDoll │ ├── CameraTableViewController.swift │ ├── GeneralTableViewController.swift │ ├── NestedDoll.storyboard │ └── SettingsTableViewController.swift │ └── TabbedView │ └── TabbedView.storyboard ├── Pokedex ├── .gitignore ├── 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 │ ├── Bugle │ │ ├── Bugle │ │ │ └── Sources │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ ├── Bugle.swift │ │ │ │ ├── BuglePiece.swift │ │ │ │ └── BugleType.swift │ │ ├── LICENSE │ │ └── README.md │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── SDWebImage │ │ ├── LICENSE │ │ ├── README.md │ │ └── SDWebImage │ │ │ ├── NSButton+WebCache.h │ │ │ ├── NSButton+WebCache.m │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── NSData+ImageContentType.m │ │ │ ├── NSImage+WebCache.h │ │ │ ├── NSImage+WebCache.m │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDAnimatedImageRep.m │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCache.m │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheConfig.m │ │ │ ├── SDWebImageCoder.h │ │ │ ├── SDWebImageCoder.m │ │ │ ├── SDWebImageCoderHelper.h │ │ │ ├── SDWebImageCoderHelper.m │ │ │ ├── SDWebImageCodersManager.h │ │ │ ├── SDWebImageCodersManager.m │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageCompat.m │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageDownloader.m │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ ├── SDWebImageFrame.h │ │ │ ├── SDWebImageFrame.m │ │ │ ├── SDWebImageGIFCoder.h │ │ │ ├── SDWebImageGIFCoder.m │ │ │ ├── SDWebImageImageIOCoder.h │ │ │ ├── SDWebImageImageIOCoder.m │ │ │ ├── SDWebImageManager.h │ │ │ ├── SDWebImageManager.m │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImagePrefetcher.m │ │ │ ├── SDWebImageTransition.h │ │ │ ├── SDWebImageTransition.m │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIButton+WebCache.m │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+ForceDecode.m │ │ │ ├── UIImage+GIF.h │ │ │ ├── UIImage+GIF.m │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImage+MultiFormat.m │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── UIImageView+WebCache.m │ │ │ ├── UIView+WebCache.h │ │ │ ├── UIView+WebCache.m │ │ │ ├── UIView+WebCacheOperation.h │ │ │ └── UIView+WebCacheOperation.m │ └── Target Support Files │ │ ├── Alamofire │ │ ├── Alamofire-dummy.m │ │ ├── Alamofire-prefix.pch │ │ ├── Alamofire-umbrella.h │ │ ├── Alamofire.modulemap │ │ └── Info.plist │ │ ├── Bugle │ │ ├── Bugle-dummy.m │ │ ├── Bugle-prefix.pch │ │ ├── Bugle-umbrella.h │ │ ├── Bugle.modulemap │ │ └── Info.plist │ │ ├── Pods-Pokedex │ │ ├── Info.plist │ │ ├── Pods-Pokedex-acknowledgements.markdown │ │ ├── Pods-Pokedex-acknowledgements.plist │ │ ├── Pods-Pokedex-dummy.m │ │ ├── Pods-Pokedex-frameworks.sh │ │ ├── Pods-Pokedex-resources.sh │ │ ├── Pods-Pokedex-umbrella.h │ │ └── Pods-Pokedex.modulemap │ │ └── SDWebImage │ │ ├── Info.plist │ │ ├── SDWebImage-dummy.m │ │ ├── SDWebImage-prefix.pch │ │ ├── SDWebImage-umbrella.h │ │ └── SDWebImage.modulemap ├── Pokedex.xcodeproj │ └── project.pbxproj ├── Pokedex.xcworkspace │ └── contents.xcworkspacedata └── Pokedex │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── black.colorset │ │ └── Contents.json │ ├── bluish.colorset │ │ └── Contents.json │ ├── booger.colorset │ │ └── Contents.json │ ├── brick.colorset │ │ └── Contents.json │ ├── coolGrey.colorset │ │ └── Contents.json │ ├── dullOrange.colorset │ │ └── Contents.json │ ├── dustyLavender.colorset │ │ └── Contents.json │ ├── frenchBlue.colorset │ │ └── Contents.json │ ├── lightEggplant.colorset │ │ └── Contents.json │ ├── logo.imageset │ │ ├── Contents.json │ │ ├── bitmap.png │ │ ├── bitmap@2x.png │ │ └── bitmap@3x.png │ ├── maize.colorset │ │ └── Contents.json │ ├── purpleishBlue.colorset │ │ └── Contents.json │ ├── roundedbutton.imageset │ │ ├── Contents.json │ │ ├── rectangle2.png │ │ ├── rectangle2@2x.png │ │ └── rectangle2@3x.png │ ├── slateGrey.colorset │ │ └── Contents.json │ ├── softBlue.colorset │ │ └── Contents.json │ ├── steelGrey.colorset │ │ └── Contents.json │ ├── textColor.colorset │ │ └── Contents.json │ ├── turtleGreen.colorset │ │ └── Contents.json │ ├── twilight.colorset │ │ └── Contents.json │ ├── vermillion.colorset │ │ └── Contents.json │ ├── white.colorset │ │ └── Contents.json │ └── windowsBlue.colorset │ │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ ├── Extensions │ │ ├── String+Ext.swift │ │ ├── UIColor+Additions.swift │ │ ├── UIView+Animations.swift │ │ └── UIViewController+Positions.swift │ ├── Navigation │ │ └── UIViewController+Navigation.swift │ └── ViewPresenter │ │ ├── BaseView.swift │ │ ├── BaseViewController.swift │ │ └── BaseViewControllerIndicator.swift │ ├── Data │ ├── Local │ │ ├── Managers │ │ │ └── SessionManager.swift │ │ └── Protocols │ │ │ └── SessionManagerProtocol.swift │ ├── LocelKeys.swift │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ ├── Session.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Pokemons │ ├── Pokemons.storyboard │ └── PokemonsTableViewController.swift │ └── Welcome │ ├── Welcome.storyboard │ ├── WelcomeContract.swift │ ├── WelcomePresenter.swift │ └── WelcomeViewController.swift ├── PokedexP2 ├── .gitignore ├── 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 │ ├── Bugle │ │ ├── Bugle │ │ │ └── Sources │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ ├── Bugle.swift │ │ │ │ ├── BuglePiece.swift │ │ │ │ └── BugleType.swift │ │ ├── LICENSE │ │ └── README.md │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── SDWebImage │ │ ├── LICENSE │ │ ├── README.md │ │ └── SDWebImage │ │ │ ├── NSButton+WebCache.h │ │ │ ├── NSButton+WebCache.m │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── NSData+ImageContentType.m │ │ │ ├── NSImage+WebCache.h │ │ │ ├── NSImage+WebCache.m │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDAnimatedImageRep.m │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCache.m │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheConfig.m │ │ │ ├── SDWebImageCoder.h │ │ │ ├── SDWebImageCoder.m │ │ │ ├── SDWebImageCoderHelper.h │ │ │ ├── SDWebImageCoderHelper.m │ │ │ ├── SDWebImageCodersManager.h │ │ │ ├── SDWebImageCodersManager.m │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageCompat.m │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageDownloader.m │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ ├── SDWebImageFrame.h │ │ │ ├── SDWebImageFrame.m │ │ │ ├── SDWebImageGIFCoder.h │ │ │ ├── SDWebImageGIFCoder.m │ │ │ ├── SDWebImageImageIOCoder.h │ │ │ ├── SDWebImageImageIOCoder.m │ │ │ ├── SDWebImageManager.h │ │ │ ├── SDWebImageManager.m │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImagePrefetcher.m │ │ │ ├── SDWebImageTransition.h │ │ │ ├── SDWebImageTransition.m │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIButton+WebCache.m │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+ForceDecode.m │ │ │ ├── UIImage+GIF.h │ │ │ ├── UIImage+GIF.m │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImage+MultiFormat.m │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── UIImageView+WebCache.m │ │ │ ├── UIView+WebCache.h │ │ │ ├── UIView+WebCache.m │ │ │ ├── UIView+WebCacheOperation.h │ │ │ └── UIView+WebCacheOperation.m │ └── Target Support Files │ │ ├── Alamofire │ │ ├── Alamofire-dummy.m │ │ ├── Alamofire-prefix.pch │ │ ├── Alamofire-umbrella.h │ │ ├── Alamofire.modulemap │ │ └── Info.plist │ │ ├── Bugle │ │ ├── Bugle-dummy.m │ │ ├── Bugle-prefix.pch │ │ ├── Bugle-umbrella.h │ │ ├── Bugle.modulemap │ │ └── Info.plist │ │ ├── Pods-Pokedex │ │ ├── Info.plist │ │ ├── Pods-Pokedex-acknowledgements.markdown │ │ ├── Pods-Pokedex-acknowledgements.plist │ │ ├── Pods-Pokedex-dummy.m │ │ ├── Pods-Pokedex-frameworks.sh │ │ ├── Pods-Pokedex-resources.sh │ │ ├── Pods-Pokedex-umbrella.h │ │ └── Pods-Pokedex.modulemap │ │ └── SDWebImage │ │ ├── Info.plist │ │ ├── SDWebImage-dummy.m │ │ ├── SDWebImage-prefix.pch │ │ ├── SDWebImage-umbrella.h │ │ └── SDWebImage.modulemap ├── Pokedex.xcodeproj │ └── project.pbxproj ├── Pokedex.xcworkspace │ └── contents.xcworkspacedata └── Pokedex │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── black.colorset │ │ └── Contents.json │ ├── bluish.colorset │ │ └── Contents.json │ ├── booger.colorset │ │ └── Contents.json │ ├── brick.colorset │ │ └── Contents.json │ ├── coolGrey.colorset │ │ └── Contents.json │ ├── dullOrange.colorset │ │ └── Contents.json │ ├── dustyLavender.colorset │ │ └── Contents.json │ ├── frenchBlue.colorset │ │ └── Contents.json │ ├── lightEggplant.colorset │ │ └── Contents.json │ ├── logo.imageset │ │ ├── Contents.json │ │ ├── bitmap.png │ │ ├── bitmap@2x.png │ │ └── bitmap@3x.png │ ├── maize.colorset │ │ └── Contents.json │ ├── purpleishBlue.colorset │ │ └── Contents.json │ ├── roundedbutton.imageset │ │ ├── Contents.json │ │ ├── rectangle2.png │ │ ├── rectangle2@2x.png │ │ └── rectangle2@3x.png │ ├── slateGrey.colorset │ │ └── Contents.json │ ├── softBlue.colorset │ │ └── Contents.json │ ├── steelGrey.colorset │ │ └── Contents.json │ ├── textColor.colorset │ │ └── Contents.json │ ├── turtleGreen.colorset │ │ └── Contents.json │ ├── twilight.colorset │ │ └── Contents.json │ ├── vermillion.colorset │ │ └── Contents.json │ ├── white.colorset │ │ └── Contents.json │ └── windowsBlue.colorset │ │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ ├── Extensions │ │ ├── String+Ext.swift │ │ ├── String+Formatter.swift │ │ ├── UIColor+Additions.swift │ │ ├── UIImageView+Ext.swift │ │ ├── UIView+Animations.swift │ │ └── UIViewController+Positions.swift │ ├── Navigation │ │ └── UIViewController+Navigation.swift │ └── ViewPresenter │ │ ├── BaseView.swift │ │ ├── BaseViewController.swift │ │ └── BaseViewControllerIndicator.swift │ ├── Data │ ├── Local │ │ ├── LocelKeys.swift │ │ ├── Managers │ │ │ └── SessionManager.swift │ │ └── Protocols │ │ │ └── SessionManagerProtocol.swift │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ ├── PokemonCollectionCellDecorator.swift │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ ├── PokemonType.swift │ ├── Session.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Pokemons │ ├── Cell │ │ ├── PokemonCollectionViewCell.swift │ │ └── PokemonCollectionViewCell.xib │ ├── Pokemons.storyboard │ └── PokemonsViewController.swift │ └── Welcome │ ├── Welcome.storyboard │ ├── WelcomeContract.swift │ ├── WelcomePresenter.swift │ └── WelcomeViewController.swift ├── PokedexP3 ├── .gitignore ├── 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 │ ├── Bugle │ │ ├── Bugle │ │ │ └── Sources │ │ │ │ ├── Bugle+Ext.swift │ │ │ │ ├── Bugle+Merge.swift │ │ │ │ ├── Bugle.swift │ │ │ │ ├── BuglePiece.swift │ │ │ │ └── BugleType.swift │ │ ├── LICENSE │ │ └── README.md │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── SDWebImage │ │ ├── LICENSE │ │ ├── README.md │ │ └── SDWebImage │ │ │ ├── NSButton+WebCache.h │ │ │ ├── NSButton+WebCache.m │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── NSData+ImageContentType.m │ │ │ ├── NSImage+WebCache.h │ │ │ ├── NSImage+WebCache.m │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDAnimatedImageRep.m │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCache.m │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheConfig.m │ │ │ ├── SDWebImageCoder.h │ │ │ ├── SDWebImageCoder.m │ │ │ ├── SDWebImageCoderHelper.h │ │ │ ├── SDWebImageCoderHelper.m │ │ │ ├── SDWebImageCodersManager.h │ │ │ ├── SDWebImageCodersManager.m │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageCompat.m │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageDownloader.m │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ ├── SDWebImageFrame.h │ │ │ ├── SDWebImageFrame.m │ │ │ ├── SDWebImageGIFCoder.h │ │ │ ├── SDWebImageGIFCoder.m │ │ │ ├── SDWebImageImageIOCoder.h │ │ │ ├── SDWebImageImageIOCoder.m │ │ │ ├── SDWebImageManager.h │ │ │ ├── SDWebImageManager.m │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImagePrefetcher.m │ │ │ ├── SDWebImageTransition.h │ │ │ ├── SDWebImageTransition.m │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIButton+WebCache.m │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+ForceDecode.m │ │ │ ├── UIImage+GIF.h │ │ │ ├── UIImage+GIF.m │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImage+MultiFormat.m │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── UIImageView+WebCache.m │ │ │ ├── UIView+WebCache.h │ │ │ ├── UIView+WebCache.m │ │ │ ├── UIView+WebCacheOperation.h │ │ │ └── UIView+WebCacheOperation.m │ └── Target Support Files │ │ ├── Alamofire │ │ ├── Alamofire-dummy.m │ │ ├── Alamofire-prefix.pch │ │ ├── Alamofire-umbrella.h │ │ ├── Alamofire.modulemap │ │ └── Info.plist │ │ ├── Bugle │ │ ├── Bugle-dummy.m │ │ ├── Bugle-prefix.pch │ │ ├── Bugle-umbrella.h │ │ ├── Bugle.modulemap │ │ └── Info.plist │ │ ├── Pods-Pokedex │ │ ├── Info.plist │ │ ├── Pods-Pokedex-acknowledgements.markdown │ │ ├── Pods-Pokedex-acknowledgements.plist │ │ ├── Pods-Pokedex-dummy.m │ │ ├── Pods-Pokedex-frameworks.sh │ │ ├── Pods-Pokedex-resources.sh │ │ ├── Pods-Pokedex-umbrella.h │ │ └── Pods-Pokedex.modulemap │ │ └── SDWebImage │ │ ├── Info.plist │ │ ├── SDWebImage-dummy.m │ │ ├── SDWebImage-prefix.pch │ │ ├── SDWebImage-umbrella.h │ │ └── SDWebImage.modulemap ├── Pokedex.xcodeproj │ └── project.pbxproj ├── Pokedex.xcworkspace │ └── contents.xcworkspacedata └── Pokedex │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── black.colorset │ │ └── Contents.json │ ├── bluish.colorset │ │ └── Contents.json │ ├── booger.colorset │ │ └── Contents.json │ ├── brick.colorset │ │ └── Contents.json │ ├── coolGrey.colorset │ │ └── Contents.json │ ├── dullOrange.colorset │ │ └── Contents.json │ ├── dustyLavender.colorset │ │ └── Contents.json │ ├── frenchBlue.colorset │ │ └── Contents.json │ ├── lightEggplant.colorset │ │ └── Contents.json │ ├── maize.colorset │ │ └── Contents.json │ ├── pokedex.imageset │ │ ├── Contents.json │ │ ├── bitmap.png │ │ ├── bitmap@2x.png │ │ └── bitmap@3x.png │ ├── purpleishBlue.colorset │ │ └── Contents.json │ ├── roundedbutton.imageset │ │ ├── Contents.json │ │ ├── rectangle2.png │ │ ├── rectangle2@2x.png │ │ └── rectangle2@3x.png │ ├── slateGrey.colorset │ │ └── Contents.json │ ├── softBlue.colorset │ │ └── Contents.json │ ├── steelGrey.colorset │ │ └── Contents.json │ ├── textColor.colorset │ │ └── Contents.json │ ├── turtleGreen.colorset │ │ └── Contents.json │ ├── twilight.colorset │ │ └── Contents.json │ ├── vermillion.colorset │ │ └── Contents.json │ ├── white.colorset │ │ └── Contents.json │ └── windowsBlue.colorset │ │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Common │ ├── Controllers │ │ └── DataTableViewController.swift │ ├── Data │ │ ├── AppDataSource.swift │ │ ├── AppParser.swift │ │ ├── DataSource.swift │ │ └── Parser.swift │ ├── Decorators │ │ ├── AppCellDecorator.swift │ │ └── CellDecorator.swift │ ├── Extensions │ │ ├── String+Ext.swift │ │ ├── String+Formatter.swift │ │ ├── UIColor+Additions.swift │ │ ├── UIImageView+Ext.swift │ │ ├── UIView+Animations.swift │ │ ├── UIView+Style.swift │ │ └── UIViewController+Positions.swift │ ├── Navigation │ │ └── UIViewController+Navigation.swift │ └── ViewPresenter │ │ ├── BaseView.swift │ │ ├── BaseViewController.swift │ │ └── BaseViewControllerIndicator.swift │ ├── Data │ ├── Local │ │ ├── LocelKeys.swift │ │ ├── Managers │ │ │ └── SessionManager.swift │ │ └── Protocols │ │ │ └── SessionManagerProtocol.swift │ └── Remote │ │ ├── PokemonsParser.swift │ │ └── PokemonsService.swift │ ├── Decorators │ ├── PokemonCollectionCellDecorator.swift │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ ├── PokemonType.swift │ ├── Session.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── Pokemons │ ├── Cell │ │ ├── PokemonCollectionViewCell.swift │ │ └── PokemonCollectionViewCell.xib │ ├── Pokemons.storyboard │ ├── PokemonsContract.swift │ └── PokemonsViewController.swift │ └── Welcome │ ├── Welcome.storyboard │ ├── WelcomeContract.swift │ ├── WelcomePresenter.swift │ └── WelcomeViewController.swift ├── SimpleAPIClient ├── SimpleAPIClient.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── SimpleAPIClient │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Data │ ├── AppDataSource.swift │ ├── DataHelper.swift │ └── DataSource.swift │ ├── Decorators │ ├── AppCellDecorator.swift │ ├── CellDecorator.swift │ └── SimplePokemonCellDecorator.swift │ ├── Domain │ ├── Pokemon.swift │ └── SimplePokemon.swift │ ├── Info.plist │ └── Presentation │ ├── DataTableViewController.swift │ └── PokemonsTableViewController.swift ├── TableView ├── TableView.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── TableView │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Data │ ├── DataHelper.swift │ ├── DataSource.swift │ └── MoviesDataSource.swift │ ├── Decorators │ ├── MovieCellDecorator.swift │ └── SimpleMovieCellDecorator.swift │ ├── Domain │ ├── EmojiMovie.swift │ ├── Movie.swift │ └── SimpleMovie.swift │ ├── Extensions │ └── UIViewController+Ext.swift │ ├── Info.plist │ └── Movies │ ├── DetailViewController.swift │ └── MasterViewController.swift └── UserDefaults ├── UserDefaults.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist └── UserDefaults ├── AppDelegate.swift ├── Assets.xcassets ├── AppIcon.appiconset │ └── Contents.json └── Contents.json ├── Base.lproj └── LaunchScreen.storyboard ├── Common ├── Controllers │ └── DataTableViewController.swift ├── Data │ ├── AppDataSource.swift │ ├── AppParser.swift │ ├── DataSource.swift │ └── Parser.swift ├── Decorators │ ├── AppCellDecorator.swift │ └── CellDecorator.swift ├── Navigation │ └── UIViewController+Navigation.swift └── ViewPresenter │ ├── BaseView.swift │ ├── BaseViewController.swift │ └── BaseViewControllerIndicator.swift ├── Data └── Remote │ ├── PokemonsParser.swift │ └── PokemonsService.swift ├── Decorators └── SimplePokemonCellDecorator.swift ├── Domain ├── Pokemon.swift └── SimplePokemon.swift ├── Info.plist └── Presentation ├── Dispatch ├── Dispatch.storyboard └── DispatchViewController.swift ├── Login ├── Login.storyboard ├── LoginContract.swift ├── LoginPresenter.swift └── LoginViewController.swift └── Pokemons ├── Pokemons.storyboard └── PokemonsTableViewController.swift /Assets/PJ-02-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-00.png -------------------------------------------------------------------------------- /Assets/PJ-02-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-01.png -------------------------------------------------------------------------------- /Assets/PJ-02-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-02.png -------------------------------------------------------------------------------- /Assets/PJ-02-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-03.png -------------------------------------------------------------------------------- /Assets/PJ-02-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-04.png -------------------------------------------------------------------------------- /Assets/PJ-02-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-05.png -------------------------------------------------------------------------------- /Assets/PJ-02-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-02-06.png -------------------------------------------------------------------------------- /Assets/PJ-03-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-03-00.png -------------------------------------------------------------------------------- /Assets/PJ-03-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-03-01.png -------------------------------------------------------------------------------- /Assets/PJ-03-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-03-02.png -------------------------------------------------------------------------------- /Assets/PJ-03-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-03-03.png -------------------------------------------------------------------------------- /Assets/PJ-04-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-01.png -------------------------------------------------------------------------------- /Assets/PJ-04-02-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-02-01.png -------------------------------------------------------------------------------- /Assets/PJ-04-02-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-02-02.png -------------------------------------------------------------------------------- /Assets/PJ-04-02-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-02-03.png -------------------------------------------------------------------------------- /Assets/PJ-04-02-04.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-02-04.gif -------------------------------------------------------------------------------- /Assets/PJ-04-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-02.png -------------------------------------------------------------------------------- /Assets/PJ-04-03-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-03-01.png -------------------------------------------------------------------------------- /Assets/PJ-04-03-02.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-03-02.gif -------------------------------------------------------------------------------- /Assets/PJ-04-03-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-03-03.png -------------------------------------------------------------------------------- /Assets/PJ-04-03-04.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-03-04.gif -------------------------------------------------------------------------------- /Assets/PJ-04-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-03.png -------------------------------------------------------------------------------- /Assets/PJ-04-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-04.png -------------------------------------------------------------------------------- /Assets/PJ-04-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-05.png -------------------------------------------------------------------------------- /Assets/PJ-04-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-06.png -------------------------------------------------------------------------------- /Assets/PJ-04-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-07.png -------------------------------------------------------------------------------- /Assets/PJ-04-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-08.png -------------------------------------------------------------------------------- /Assets/PJ-04-09.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-09.gif -------------------------------------------------------------------------------- /Assets/PJ-04-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-10.png -------------------------------------------------------------------------------- /Assets/PJ-04-11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-04-11.gif -------------------------------------------------------------------------------- /Assets/PJ-05-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-05-01.png -------------------------------------------------------------------------------- /Assets/PJ-06-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-06-01.png -------------------------------------------------------------------------------- /Assets/PJ-08-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-08-01.png -------------------------------------------------------------------------------- /Assets/PJ-08-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-08-02.png -------------------------------------------------------------------------------- /Assets/PJ-10-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-01.png -------------------------------------------------------------------------------- /Assets/PJ-10-02-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-02-01.png -------------------------------------------------------------------------------- /Assets/PJ-10-02-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-02-02.png -------------------------------------------------------------------------------- /Assets/PJ-10-02-03.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-02-03.gif -------------------------------------------------------------------------------- /Assets/PJ-10-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-02.png -------------------------------------------------------------------------------- /Assets/PJ-10-03-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-01.png -------------------------------------------------------------------------------- /Assets/PJ-10-03-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-02.png -------------------------------------------------------------------------------- /Assets/PJ-10-03-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-03.png -------------------------------------------------------------------------------- /Assets/PJ-10-03-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-04.png -------------------------------------------------------------------------------- /Assets/PJ-10-03-05.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-05.gif -------------------------------------------------------------------------------- /Assets/PJ-10-03-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-06.png -------------------------------------------------------------------------------- /Assets/PJ-10-03-07.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-07.gif -------------------------------------------------------------------------------- /Assets/PJ-10-03-08.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03-08.gif -------------------------------------------------------------------------------- /Assets/PJ-10-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-03.png -------------------------------------------------------------------------------- /Assets/PJ-10-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-04.png -------------------------------------------------------------------------------- /Assets/PJ-10-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-05.png -------------------------------------------------------------------------------- /Assets/PJ-10-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-06.png -------------------------------------------------------------------------------- /Assets/PJ-10-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-07.png -------------------------------------------------------------------------------- /Assets/PJ-10-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-08.png -------------------------------------------------------------------------------- /Assets/PJ-10-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-09.png -------------------------------------------------------------------------------- /Assets/PJ-10-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-10.png -------------------------------------------------------------------------------- /Assets/PJ-10-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-10-11.png -------------------------------------------------------------------------------- /Assets/PJ-11-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-11-01.png -------------------------------------------------------------------------------- /Assets/PJ-11-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-11-02.png -------------------------------------------------------------------------------- /Assets/PJ-11-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-11-03.png -------------------------------------------------------------------------------- /Assets/PJ-11-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-11-04.png -------------------------------------------------------------------------------- /Assets/PJ-11-05.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Assets/PJ-11-05.gif -------------------------------------------------------------------------------- /Playgrounds/P01-01-MapFilterReduce.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Playgrounds/P01-SwiftBasics.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Playgrounds/P02-Delegation.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Playgrounds/P03-Tables-and-Collections.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Projects/Alerts/Alerts.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/Alerts/Alerts.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/Alerts/Alerts/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/CocoaPods/CocoaPods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/CocoaPods/CocoaPods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/CocoaPods/CocoaPods.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Projects/CocoaPods/CocoaPods.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/CocoaPods/CocoaPods/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/CocoaPods/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'CocoaPods' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for CocoaPods 9 | pod 'Bugle' 10 | 11 | end 12 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Bugle (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - Bugle 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - Bugle 10 | 11 | SPEC CHECKSUMS: 12 | Bugle: eb8a5916c84c17d476001088772d52f6ac6cf211 13 | 14 | PODFILE CHECKSUM: 803f89767317d28a709422b98759df78ffc39f73 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Bugle (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - Bugle 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - Bugle 10 | 11 | SPEC CHECKSUMS: 12 | Bugle: eb8a5916c84c17d476001088772d52f6ac6cf211 13 | 14 | PODFILE CHECKSUM: 803f89767317d28a709422b98759df78ffc39f73 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Pods-CocoaPods/Pods-CocoaPods-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_CocoaPods : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_CocoaPods 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Pods-CocoaPods/Pods-CocoaPods-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_CocoaPodsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_CocoaPodsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/CocoaPods/Pods/Target Support Files/Pods-CocoaPods/Pods-CocoaPods.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_CocoaPods { 2 | umbrella header "Pods-CocoaPods-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/Databases/MoviesList.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/Databases/MoviesList.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/Databases/MoviesList/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/Databases/MoviesList/MoviesList.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | _XCCurrentVersionName 6 | MoviesList.xcdatamodel 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/Delegation/Delegation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/Delegation/Delegation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/Delegation/Delegation/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/Delegation/Delegation/SongLoaderResponder.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SoundLoader.swift 3 | // Delegation 4 | // 5 | // Created by Luis Burgos on 5/31/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | @objc protocol SongLoaderResponder { 12 | @objc optional func willBeginDownload() 13 | func didFinishDownload() 14 | } 15 | -------------------------------------------------------------------------------- /Projects/Dispatcher/Dispatcher.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/Dispatcher/Dispatcher.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/Dispatcher/Dispatcher/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/HolaMundo/HolaMundo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/HolaMundo/HolaMundo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/HolaMundo/HolaMundo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Data/Local/LocalKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocalKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loadingMessage = "loading-message" 13 | } 14 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Data/Local/Protocols/DispatchManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DispatchManagerProtocol { 12 | func save(message: String?) 13 | func retrieve() -> String? 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Projects/LoginForm/LoginForm/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Projects/Navigation/Navigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/Navigation/Navigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/Navigation/Navigation/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/Navigation/Navigation/NestedDoll/CameraTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CameraTableViewController.swift 3 | // Navigation 4 | // 5 | // Created by Luis Burgos on 6/7/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CameraTableViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Camera" 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Projects/Navigation/Navigation/NestedDoll/GeneralTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GeneralTableViewController.swift 3 | // Navigation 4 | // 5 | // Created by Luis Burgos on 6/7/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class GeneralTableViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "General" 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Projects/Navigation/Navigation/NestedDoll/SettingsTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsTableViewController.swift 3 | // Navigation 4 | // 5 | // Created by Luis Burgos on 6/7/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SettingsTableViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Nested Settings" 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Projects/OutletCatalog/OutletCatalog.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/OutletCatalog/OutletCatalog.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/OutletCatalog/OutletCatalog/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Pokedex' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Pokedex 9 | 10 | pod 'Alamofire', '~> 4.7' 11 | pod 'SDWebImage', '~>4.0' 12 | pod 'Bugle' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/Pokedex/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 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pokedex : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pokedex 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_PokedexVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PokedexVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pokedex { 2 | umbrella header "Pods-Pokedex-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/black.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.000", 13 | "alpha" : "1.000", 14 | "red" : "0.000", 15 | "blue" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/bluish.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.576", 13 | "alpha" : "1.000", 14 | "red" : "0.145", 15 | "blue" : "0.796" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/booger.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.678", 13 | "alpha" : "1.000", 14 | "red" : "0.635", 15 | "blue" : "0.243" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/brick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.216", 13 | "alpha" : "1.000", 14 | "red" : "0.667", 15 | "blue" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/coolGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.627", 13 | "alpha" : "1.000", 14 | "red" : "0.627", 15 | "blue" : "0.643" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/dullOrange.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.478", 13 | "alpha" : "1.000", 14 | "red" : "0.875", 15 | "blue" : "0.247" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/dustyLavender.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.643", 13 | "alpha" : "1.000", 14 | "red" : "0.729", 15 | "blue" : "0.737" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/frenchBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.357", 13 | "alpha" : "1.000", 14 | "red" : "0.231", 15 | "blue" : "0.655" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/lightEggplant.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.255", 13 | "alpha" : "1.000", 14 | "red" : "0.545", 15 | "blue" : "0.573" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap.png -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@2x.png -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@3x.png -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/maize.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.788", 13 | "alpha" : "1.000", 14 | "red" : "0.941", 15 | "blue" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/purpleishBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.243", 13 | "alpha" : "1.000", 14 | "red" : "0.357", 15 | "blue" : "0.933" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/slateGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.357", 13 | "alpha" : "1.000", 14 | "red" : "0.341", 15 | "blue" : "0.384" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/softBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.525", 13 | "alpha" : "1.000", 14 | "red" : "0.392", 15 | "blue" : "0.906" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/steelGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.529", 13 | "alpha" : "1.000", 14 | "red" : "0.518", 15 | "blue" : "0.549" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/textColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "1.000", 13 | "alpha" : "1.000", 14 | "red" : "1.000", 15 | "blue" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/turtleGreen.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.745", 13 | "alpha" : "1.000", 14 | "red" : "0.506", 15 | "blue" : "0.345" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/twilight.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.314", 13 | "alpha" : "1.000", 14 | "red" : "0.380", 15 | "blue" : "0.537" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/vermillion.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.157", 13 | "alpha" : "1.000", 14 | "red" : "0.859", 15 | "blue" : "0.067" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/white.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.937", 13 | "alpha" : "1.000", 14 | "red" : "0.937", 15 | "blue" : "0.937" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Assets.xcassets/windowsBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.612", 13 | "alpha" : "1.000", 14 | "red" : "0.306", 15 | "blue" : "0.800" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Data/Local/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loggedIn = "logged-in" 13 | case userName = "username" 14 | } 15 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Projects/Pokedex/Pokedex/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Pokedex' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Pokedex 9 | 10 | pod 'Alamofire', '~> 4.7' 11 | pod 'SDWebImage', '~>4.0' 12 | pod 'Bugle' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/PokedexP2/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 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pokedex : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pokedex 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_PokedexVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PokedexVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pokedex { 2 | umbrella header "Pods-Pokedex-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/black.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.000", 13 | "alpha" : "1.000", 14 | "red" : "0.000", 15 | "blue" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/bluish.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.576", 13 | "alpha" : "1.000", 14 | "red" : "0.145", 15 | "blue" : "0.796" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/booger.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.678", 13 | "alpha" : "1.000", 14 | "red" : "0.635", 15 | "blue" : "0.243" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/brick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.216", 13 | "alpha" : "1.000", 14 | "red" : "0.667", 15 | "blue" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/coolGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.627", 13 | "alpha" : "1.000", 14 | "red" : "0.627", 15 | "blue" : "0.643" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/dullOrange.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.478", 13 | "alpha" : "1.000", 14 | "red" : "0.875", 15 | "blue" : "0.247" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/dustyLavender.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.643", 13 | "alpha" : "1.000", 14 | "red" : "0.729", 15 | "blue" : "0.737" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/frenchBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.357", 13 | "alpha" : "1.000", 14 | "red" : "0.231", 15 | "blue" : "0.655" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/lightEggplant.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.255", 13 | "alpha" : "1.000", 14 | "red" : "0.545", 15 | "blue" : "0.573" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/maize.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.788", 13 | "alpha" : "1.000", 14 | "red" : "0.941", 15 | "blue" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/pokedex.imageset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP2/Pokedex/Assets.xcassets/pokedex.imageset/bitmap.png -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP2/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@2x.png -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP2/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@3x.png -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/purpleishBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.243", 13 | "alpha" : "1.000", 14 | "red" : "0.357", 15 | "blue" : "0.933" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/softBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.525", 13 | "alpha" : "1.000", 14 | "red" : "0.392", 15 | "blue" : "0.906" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/twilight.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.314", 13 | "alpha" : "1.000", 14 | "red" : "0.380", 15 | "blue" : "0.537" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Assets.xcassets/white.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.937", 13 | "alpha" : "1.000", 14 | "red" : "0.937", 15 | "blue" : "0.937" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Common/Extensions/String+Formatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Formatter.swift 3 | // Pokedex 4 | // 5 | // Created by Luis Burgos on 7/13/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func toNumberIdentifier() -> String { 13 | return String(format: "#%@", self) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Data/Local/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loggedIn = "logged-in" 13 | case userName = "username" 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Projects/PokedexP2/Pokedex/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Pokedex' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Pokedex 9 | 10 | pod 'Alamofire', '~> 4.7' 11 | pod 'SDWebImage', '~>4.0' 12 | pod 'Bugle' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/PokedexP3/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 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pokedex : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pokedex 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_PokedexVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PokedexVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pokedex { 2 | umbrella header "Pods-Pokedex-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/black.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.000", 13 | "alpha" : "1.000", 14 | "red" : "0.000", 15 | "blue" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/bluish.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.576", 13 | "alpha" : "1.000", 14 | "red" : "0.145", 15 | "blue" : "0.796" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/booger.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.678", 13 | "alpha" : "1.000", 14 | "red" : "0.635", 15 | "blue" : "0.243" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/brick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.216", 13 | "alpha" : "1.000", 14 | "red" : "0.667", 15 | "blue" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/coolGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.627", 13 | "alpha" : "1.000", 14 | "red" : "0.627", 15 | "blue" : "0.643" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/filter.imageset/ifFilter1608702.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/filter.imageset/ifFilter1608702.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/filter.imageset/ifFilter1608702@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/filter.imageset/ifFilter1608702@2x.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/filter.imageset/ifFilter1608702@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/filter.imageset/ifFilter1608702@3x.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/maize.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.788", 13 | "alpha" : "1.000", 14 | "red" : "0.941", 15 | "blue" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@2x.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@3x.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Projects/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/softBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.525", 13 | "alpha" : "1.000", 14 | "red" : "0.392", 15 | "blue" : "0.906" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/twilight.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.314", 13 | "alpha" : "1.000", 14 | "red" : "0.380", 15 | "blue" : "0.537" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Assets.xcassets/white.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.937", 13 | "alpha" : "1.000", 14 | "red" : "0.937", 15 | "blue" : "0.937" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Common/Extensions/String+Formatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Formatter.swift 3 | // Pokedex 4 | // 5 | // Created by Luis Burgos on 7/13/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func toNumberIdentifier() -> String { 13 | return String(format: "#%@", self) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Data/Local/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loggedIn = "logged-in" 13 | case userName = "username" 14 | } 15 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Projects/PokedexP3/Pokedex/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/SimpleAPIClient/SimpleAPIClient/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Projects/TableView/TableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/TableView/TableView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/TableView/TableView/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/TableView/TableView/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/TableView/TableView/Decorators/MovieCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | protocol MovieCellDecorator { 13 | func decorate(cell: UITableViewCell, using model: Movie?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/TableView/TableView/Domain/Movie.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Movie { 12 | var id: String { get } 13 | var name: String { get } 14 | } 15 | -------------------------------------------------------------------------------- /Projects/TableView/TableView/Domain/SimpleMovie.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SimpleMovie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct SimpleMovie: Movie { 12 | var id: String 13 | var name: String 14 | 15 | init(id: String, name: String) { 16 | self.id = id 17 | self.name = name 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Data/Local/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loadingMessage = "loading-message" 13 | case loggedIn = "logged-in" 14 | case userName = "username" 15 | } 16 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Data/Local/Protocols/DispatchManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DispatchManagerProtocol { 12 | func save(message: String?) 13 | func retrieve() -> String? 14 | func clear() 15 | } 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Projects/UserDefaults/UserDefaults/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Starters/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/.gitkeep -------------------------------------------------------------------------------- /Starters/Alerts/Alerts.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/Alerts/Alerts.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/Alerts/Alerts/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/CocoaPods/CocoaPods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/CocoaPods/CocoaPods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/CocoaPods/CocoaPods/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/Delegation/Delegation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/Delegation/Delegation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/Delegation/Delegation/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/Delegation/Delegation/SongLoaderResponder.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SoundLoader.swift 3 | // Delegation 4 | // 5 | // Created by Luis Burgos on 5/31/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SongLoaderResponder { 12 | func willBeginDownload() 13 | func didFinishDownload() 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Starters/LoginForm/LoginForm/Presentation/Login/LoginViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginViewController.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class LoginViewController { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Starters/LoginFormP2/LoginForm/Presentation/Login/LoginContract.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginContract.swift 3 | // YellowPod 4 | // 5 | // Created by Luis Burgos on 12/13/17. 6 | // Copyright © 2017 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol LoginView: BaseView { 12 | func showMainScreen() 13 | } 14 | 15 | protocol LoginViewPresenter { 16 | init(view: LoginView) 17 | func login(_ name: String?, passsword: String?) 18 | } 19 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/LoginFormP3/LoginForm/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Starters/NavigationP1/Navigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/NavigationP1/Navigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/NavigationP1/Navigation/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/NavigationP2/Navigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/NavigationP2/Navigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/NavigationP2/Navigation/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/NavigationP2/Navigation/NestedDoll/CameraTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CameraTableViewController.swift 3 | // Navigation 4 | // 5 | // Created by Luis Burgos on 6/7/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CameraTableViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Camera" 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Starters/NavigationP2/Navigation/NestedDoll/GeneralTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GeneralTableViewController.swift 3 | // Navigation 4 | // 5 | // Created by Luis Burgos on 6/7/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class GeneralTableViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "General" 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Starters/Pokedex/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Pokedex' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Pokedex 9 | 10 | pod 'Alamofire', '~> 4.7' 11 | pod 'SDWebImage', '~>4.0' 12 | pod 'Bugle' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/Pokedex/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 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pokedex : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pokedex 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_PokedexVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PokedexVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pokedex { 2 | umbrella header "Pods-Pokedex-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/black.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.000", 13 | "alpha" : "1.000", 14 | "red" : "0.000", 15 | "blue" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/bluish.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.576", 13 | "alpha" : "1.000", 14 | "red" : "0.145", 15 | "blue" : "0.796" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/booger.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.678", 13 | "alpha" : "1.000", 14 | "red" : "0.635", 15 | "blue" : "0.243" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/brick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.216", 13 | "alpha" : "1.000", 14 | "red" : "0.667", 15 | "blue" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/coolGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.627", 13 | "alpha" : "1.000", 14 | "red" : "0.627", 15 | "blue" : "0.643" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/dullOrange.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.478", 13 | "alpha" : "1.000", 14 | "red" : "0.875", 15 | "blue" : "0.247" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/frenchBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.357", 13 | "alpha" : "1.000", 14 | "red" : "0.231", 15 | "blue" : "0.655" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap.png -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@2x.png -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/Pokedex/Pokedex/Assets.xcassets/logo.imageset/bitmap@3x.png -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/maize.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.788", 13 | "alpha" : "1.000", 14 | "red" : "0.941", 15 | "blue" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/Pokedex/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/slateGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.357", 13 | "alpha" : "1.000", 14 | "red" : "0.341", 15 | "blue" : "0.384" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/softBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.525", 13 | "alpha" : "1.000", 14 | "red" : "0.392", 15 | "blue" : "0.906" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/steelGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.529", 13 | "alpha" : "1.000", 14 | "red" : "0.518", 15 | "blue" : "0.549" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/textColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "1.000", 13 | "alpha" : "1.000", 14 | "red" : "1.000", 15 | "blue" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/twilight.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.314", 13 | "alpha" : "1.000", 14 | "red" : "0.380", 15 | "blue" : "0.537" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/vermillion.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.157", 13 | "alpha" : "1.000", 14 | "red" : "0.859", 15 | "blue" : "0.067" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Assets.xcassets/white.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.937", 13 | "alpha" : "1.000", 14 | "red" : "0.937", 15 | "blue" : "0.937" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Data/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loggedIn = "logged-in" 13 | case userName = "username" 14 | } 15 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Starters/Pokedex/Pokedex/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Pokedex' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Pokedex 9 | 10 | pod 'Alamofire', '~> 4.7' 11 | pod 'SDWebImage', '~>4.0' 12 | pod 'Bugle' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/PokedexP2/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 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pokedex : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pokedex 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_PokedexVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PokedexVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pokedex { 2 | umbrella header "Pods-Pokedex-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/black.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.000", 13 | "alpha" : "1.000", 14 | "red" : "0.000", 15 | "blue" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/bluish.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.576", 13 | "alpha" : "1.000", 14 | "red" : "0.145", 15 | "blue" : "0.796" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/booger.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.678", 13 | "alpha" : "1.000", 14 | "red" : "0.635", 15 | "blue" : "0.243" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/brick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.216", 13 | "alpha" : "1.000", 14 | "red" : "0.667", 15 | "blue" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/coolGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.627", 13 | "alpha" : "1.000", 14 | "red" : "0.627", 15 | "blue" : "0.643" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/logo.imageset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP2/Pokedex/Assets.xcassets/logo.imageset/bitmap.png -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/logo.imageset/bitmap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP2/Pokedex/Assets.xcassets/logo.imageset/bitmap@2x.png -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/logo.imageset/bitmap@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP2/Pokedex/Assets.xcassets/logo.imageset/bitmap@3x.png -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/maize.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.788", 13 | "alpha" : "1.000", 14 | "red" : "0.941", 15 | "blue" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP2/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/softBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.525", 13 | "alpha" : "1.000", 14 | "red" : "0.392", 15 | "blue" : "0.906" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/twilight.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.314", 13 | "alpha" : "1.000", 14 | "red" : "0.380", 15 | "blue" : "0.537" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Assets.xcassets/white.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.937", 13 | "alpha" : "1.000", 14 | "red" : "0.937", 15 | "blue" : "0.937" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Common/Extensions/String+Formatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Formatter.swift 3 | // Pokedex 4 | // 5 | // Created by Luis Burgos on 7/13/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func toNumberIdentifier() -> String { 13 | return String(format: "#%@", self) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Data/Local/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loggedIn = "logged-in" 13 | case userName = "username" 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Starters/PokedexP2/Pokedex/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Pokedex' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Pokedex 9 | 10 | pod 'Alamofire', '~> 4.7' 11 | pod 'SDWebImage', '~>4.0' 12 | pod 'Bugle' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/PokedexP3/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 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Bugle/Bugle-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Bugle : NSObject 3 | @end 4 | @implementation PodsDummy_Bugle 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Bugle/Bugle-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Bugle/Bugle-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double BugleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char BugleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Bugle/Bugle.modulemap: -------------------------------------------------------------------------------- 1 | framework module Bugle { 2 | umbrella header "Bugle-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Pokedex : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Pokedex 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_PokedexVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PokedexVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/Pods-Pokedex/Pods-Pokedex.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Pokedex { 2 | umbrella header "Pods-Pokedex-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/black.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.000", 13 | "alpha" : "1.000", 14 | "red" : "0.000", 15 | "blue" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/bluish.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.576", 13 | "alpha" : "1.000", 14 | "red" : "0.145", 15 | "blue" : "0.796" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/booger.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.678", 13 | "alpha" : "1.000", 14 | "red" : "0.635", 15 | "blue" : "0.243" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/brick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.216", 13 | "alpha" : "1.000", 14 | "red" : "0.667", 15 | "blue" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/coolGrey.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.627", 13 | "alpha" : "1.000", 14 | "red" : "0.627", 15 | "blue" : "0.643" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/maize.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.788", 13 | "alpha" : "1.000", 14 | "red" : "0.941", 15 | "blue" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap.png -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@2x.png -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP3/Pokedex/Assets.xcassets/pokedex.imageset/bitmap@3x.png -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2.png -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@2x.png -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yellowme/ios-course/4a3cc492b1cb9f67b9ee1429591c8625f787324d/Starters/PokedexP3/Pokedex/Assets.xcassets/roundedbutton.imageset/rectangle2@3x.png -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/softBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.525", 13 | "alpha" : "1.000", 14 | "red" : "0.392", 15 | "blue" : "0.906" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/twilight.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.314", 13 | "alpha" : "1.000", 14 | "red" : "0.380", 15 | "blue" : "0.537" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Assets.xcassets/white.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "green" : "0.937", 13 | "alpha" : "1.000", 14 | "red" : "0.937", 15 | "blue" : "0.937" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Common/Extensions/String+Formatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Formatter.swift 3 | // Pokedex 4 | // 5 | // Created by Luis Burgos on 7/13/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func toNumberIdentifier() -> String { 13 | return String(format: "#%@", self) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Data/Local/LocelKeys.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocelKeys.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum LocalKeys: String { 12 | case loggedIn = "logged-in" 13 | case userName = "username" 14 | } 15 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Data/Local/Protocols/SessionManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionManagerProtocol.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SessionManagerProtocol { 12 | func save(session: Session?) 13 | func retrieve() -> Session 14 | func clear() 15 | } 16 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | -------------------------------------------------------------------------------- /Starters/PokedexP3/Pokedex/Domain/Session.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session.swift 3 | // UserDefaults 4 | // 5 | // Created by Luis Burgos on 6/30/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Session { 12 | let loggedIn: Bool 13 | let userName: String 14 | } 15 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Data/DataHelper.swift: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // File.swift 4 | // TableView 5 | // 6 | // Created by Luis Burgos on 6/1/18. 7 | // Copyright © 2018 Yellowme. All rights reserved. 8 | // 9 | 10 | import Foundation 11 | 12 | class DataHelper { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Starters/SimpleAPIClient/SimpleAPIClient/Domain/SimplePokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SimpleMovie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct SimplePokemon: Pokemon { 12 | let name: String? 13 | 14 | init(name: String) { 15 | self.name = name 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Starters/TableView/TableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/TableView/TableView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/TableView/TableView/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/TableView/TableView/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/TableView/TableView/Decorators/MovieCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | protocol MovieCellDecorator { 13 | func decorate(cell: UITableViewCell, using movie: Movie?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/TableView/TableView/Domain/Movie.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Movie { 12 | var id: String { get } 13 | var name: String { get } 14 | } 15 | -------------------------------------------------------------------------------- /Starters/TableView/TableView/Domain/SimpleMovie.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SimpleMovie.swift 3 | // TableView 4 | // 5 | // Created by Luis Burgos on 6/2/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class SimpleMovie: Movie { 12 | var id: String 13 | var name: String 14 | 15 | init(id: String, name: String) { 16 | self.id = id 17 | self.name = name 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Common/Data/AppParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppParser.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppParser: Parser { 12 | func parse(_ data: Data) -> Model? { 13 | // Override and parse the concrete model 14 | return nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Common/Data/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol DataSource { 12 | associatedtype Model 13 | var numberOfSections: Int { get } 14 | func numberOfRowsInSection(section: Int) -> Int 15 | func modelAt(indexPath: IndexPath) -> Model? 16 | } 17 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Common/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Parser.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Parser { 12 | associatedtype ResponseModel 13 | func parse(_ data: Data) -> ResponseModel? 14 | } 15 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Common/Decorators/AppCellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCellDecorator.swift 3 | // SimpleAPIClient 4 | // 5 | // Created by Luis Burgos on 6/8/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppCellDecorator: CellDecorator { 12 | func decorate(cell: UITableViewCell, using model: T?) { 13 | //IMPORTANT: Must override 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Common/Decorators/CellDecorator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieCellDecorator.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol CellDecorator { 12 | associatedtype Model 13 | func decorate(cell: UITableViewCell, using model: Model?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Common/ViewPresenter/BaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseView.swift 3 | // LoginForm 4 | // 5 | // Created by Luis Burgos on 6/15/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol BaseView: class { 12 | func setProgress(to isLoading: Bool, with alpha: CGFloat?, overlay: UIColor?) 13 | func display(_ message: String?) 14 | } 15 | -------------------------------------------------------------------------------- /Starters/UserDefaults/UserDefaults/Domain/Pokemon.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // TableView 4 | // 5 | // Created by Erick A. Montañez on 6/1/18. 6 | // Copyright © 2018 Yellowme. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol Pokemon { } 12 | --------------------------------------------------------------------------------