实例介绍
Raywenderlich出品 RxSwift Reactive Programming With Swift 包含Source code 最新版本Swift4
【实例截图】
【核心代码】
4943cbde-af8b-4929-9cd1-d91cd2c5c43b
├── 02-observable-pg
│ ├── challenge
│ │ ├── Challenge1-Finished
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── Challenge1-Starter
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── Challenge2-Finished
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Challenge2-Starter
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── final
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ ├── Resources
│ │ │ │ └── Copyright.txt
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── projects
│ │ ├── challenge
│ │ │ ├── Challenge1-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── bootstrap.sh
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Sources
│ │ │ │ │ └── SupportCode.swift
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Challenge1-Starter
│ │ │ │ └── RxPlayground
│ │ │ │ ├── bootstrap.sh
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Sources
│ │ │ │ │ └── SupportCode.swift
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Challenge2-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── bootstrap.sh
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Sources
│ │ │ │ │ └── SupportCode.swift
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── Challenge2-Starter
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── final
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ ├── Resources
│ │ │ │ │ └── Copyright.txt
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ ├── Resources
│ │ │ │ └── Copyright.txt
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ └── RxPlayground
│ ├── bootstrap.sh
│ ├── RxSwiftPlayground.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ ├── Resources
│ │ │ └── Copyright.txt
│ │ └── Sources
│ │ └── SupportCode.swift
│ └── RxSwiftPlayground.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 03-subjects
│ ├── challenge
│ │ ├── Challenge1-Finished
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── Challenge1-Starter
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── Challenge2-Finished
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Challenge2-Starter
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── final
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ └── RxPlayground
│ ├── bootstrap.sh
│ ├── RxSwiftPlayground.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ └── Sources
│ │ └── SupportCode.swift
│ └── RxSwiftPlayground.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 04-observables-in-practice
│ ├── challenges
│ │ ├── Combinestagram
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-1024.png
│ │ │ │ │ ├── Icon-60@2x.png
│ │ │ │ │ ├── Icon-60@3x.png
│ │ │ │ │ ├── Icon-Small@2x.png
│ │ │ │ │ ├── Icon-Small@3x.png
│ │ │ │ │ ├── Icon-Spotlight-40@2x.png
│ │ │ │ │ ├── Icon-Spotlight-40@3x.png
│ │ │ │ │ └── Icon-Spotlight-40.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── IMG_1907.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── IMG_1907.jpg
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ ├── MainViewController.swift
│ │ │ ├── PhotoCell.swift
│ │ │ ├── PhotosViewController.swift
│ │ │ ├── PhotoWriter.swift
│ │ │ ├── UIImage+Collage.swift
│ │ │ └── UIViewController+rx.swift
│ │ ├── Combinestagram.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ ├── final
│ │ ├── Combinestagram
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-1024.png
│ │ │ │ │ ├── Icon-60@2x.png
│ │ │ │ │ ├── Icon-60@3x.png
│ │ │ │ │ ├── Icon-Small@2x.png
│ │ │ │ │ ├── Icon-Small@3x.png
│ │ │ │ │ ├── Icon-Spotlight-40@2x.png
│ │ │ │ │ ├── Icon-Spotlight-40@3x.png
│ │ │ │ │ └── Icon-Spotlight-40.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── IMG_1907.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── IMG_1907.jpg
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ ├── MainViewController.swift
│ │ │ ├── PhotoCell.swift
│ │ │ ├── PhotosViewController.swift
│ │ │ ├── PhotoWriter.swift
│ │ │ └── UIImage+Collage.swift
│ │ ├── Combinestagram.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ └── starter
│ ├── Combinestagram
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Icon-1024.png
│ │ │ │ ├── Icon-60@2x.png
│ │ │ │ ├── Icon-60@3x.png
│ │ │ │ ├── Icon-Small@2x.png
│ │ │ │ ├── Icon-Small@3x.png
│ │ │ │ ├── Icon-Spotlight-40@2x.png
│ │ │ │ ├── Icon-Spotlight-40@3x.png
│ │ │ │ └── Icon-Spotlight-40.png
│ │ │ ├── Contents.json
│ │ │ └── IMG_1907.imageset
│ │ │ ├── Contents.json
│ │ │ └── IMG_1907.jpg
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── MainViewController.swift
│ │ ├── PhotoCell.swift
│ │ ├── PhotosViewController.swift
│ │ ├── PhotoWriter.swift
│ │ └── UIImage+Collage.swift
│ ├── Combinestagram.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── Podfile
├── 05-filtering-operators
│ ├── challenge
│ │ ├── Challenge1-Finished
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ └── SupportCode.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Challenge1-Starter
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── final
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ └── RxPlayground
│ ├── bootstrap.sh
│ ├── RxSwiftPlayground.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ └── Sources
│ │ └── SupportCode.swift
│ └── RxSwiftPlayground.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 06-filtering-operators-in-practice
│ ├── final
│ │ ├── Combinestagram
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-1024.png
│ │ │ │ │ ├── Icon-60@2x.png
│ │ │ │ │ ├── Icon-60@3x.png
│ │ │ │ │ ├── Icon-Small@2x.png
│ │ │ │ │ ├── Icon-Small@3x.png
│ │ │ │ │ ├── Icon-Spotlight-40@2x.png
│ │ │ │ │ ├── Icon-Spotlight-40@3x.png
│ │ │ │ │ └── Icon-Spotlight-40.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── IMG_1907.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── IMG_1907.jpg
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ ├── MainViewController.swift
│ │ │ ├── PhotoCell.swift
│ │ │ ├── PhotosViewController.swift
│ │ │ ├── PhotoWriter.swift
│ │ │ ├── PHPhotoLibrary+Rx.swift
│ │ │ ├── UIImage+Collage.swift
│ │ │ └── UIViewController+Rx.swift
│ │ ├── Combinestagram.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ └── starter
│ ├── Combinestagram
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Icon-1024.png
│ │ │ │ ├── Icon-60@2x.png
│ │ │ │ ├── Icon-60@3x.png
│ │ │ │ ├── Icon-Small@2x.png
│ │ │ │ ├── Icon-Small@3x.png
│ │ │ │ ├── Icon-Spotlight-40@2x.png
│ │ │ │ ├── Icon-Spotlight-40@3x.png
│ │ │ │ └── Icon-Spotlight-40.png
│ │ │ ├── Contents.json
│ │ │ └── IMG_1907.imageset
│ │ │ ├── Contents.json
│ │ │ └── IMG_1907.jpg
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── MainViewController.swift
│ │ ├── PhotoCell.swift
│ │ ├── PhotosViewController.swift
│ │ ├── PhotoWriter.swift
│ │ ├── UIImage+Collage.swift
│ │ └── UIViewController+Rx.swift
│ ├── Combinestagram.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── Podfile
├── 07-transforming-operators
│ ├── challenge
│ │ ├── Challenge1-Finished
│ │ │ └── RxPlayground
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Sources
│ │ │ │ ├── SupportCode.swift
│ │ │ │ └── Unwrap.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Challenge1-Starter
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ ├── SupportCode.swift
│ │ │ └── Unwrap.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── final
│ │ └── RxPlayground
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ └── Sources
│ │ │ └── SupportCode.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ └── RxPlayground
│ ├── bootstrap.sh
│ ├── RxSwiftPlayground.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ └── Sources
│ │ └── SupportCode.swift
│ └── RxSwiftPlayground.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 08-transforming-operators-in-practice
│ ├── challenges
│ │ ├── GitFeed
│ │ │ ├── ActivityController.swift
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── blank-avatar.imageset
│ │ │ │ │ ├── blank-avatar@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Event.swift
│ │ │ └── Info.plist
│ │ ├── GitFeed.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ ├── final
│ │ ├── GitFeed
│ │ │ ├── ActivityController.swift
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── blank-avatar.imageset
│ │ │ │ │ ├── blank-avatar@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Event.swift
│ │ │ └── Info.plist
│ │ ├── GitFeed.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ └── starter
│ ├── GitFeed
│ │ ├── ActivityController.swift
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── blank-avatar.imageset
│ │ │ │ ├── blank-avatar@2x.png
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Event.swift
│ │ └── Info.plist
│ ├── GitFeed.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── Podfile
├── 09-combining-operators
│ ├── challenge
│ │ ├── Challenge1-Finished
│ │ │ ├── bootstrap.sh
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── contents.xcplayground
│ │ │ │ ├── Resources
│ │ │ │ │ └── Copyright.txt
│ │ │ │ └── Sources
│ │ │ │ └── Helpers.swift
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Challenge1-Starter
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ ├── Resources
│ │ │ │ └── Copyright.txt
│ │ │ └── Sources
│ │ │ └── Helpers.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── final
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ ├── Resources
│ │ │ │ └── Copyright.txt
│ │ │ └── Sources
│ │ │ └── Helpers.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ ├── bootstrap.sh
│ ├── RxSwiftPlayground.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ ├── Resources
│ │ │ └── Copyright.txt
│ │ └── Sources
│ │ └── Helpers.swift
│ └── RxSwiftPlayground.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 10-combining-operators-in-practice
│ ├── challenge
│ │ ├── challenge1
│ │ │ └── OurPlanet
│ │ │ ├── OurPlanet
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── background.imageset
│ │ │ │ │ │ ├── background.jpg
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CategoriesViewController.swift
│ │ │ │ ├── EventCell.swift
│ │ │ │ ├── EventsViewController.swift
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Model
│ │ │ │ │ ├── EOCategory.swift
│ │ │ │ │ ├── EOEnvelope.swift
│ │ │ │ │ ├── EOError.swift
│ │ │ │ │ ├── EOEvent.swift
│ │ │ │ │ ├── EOLocation.swift
│ │ │ │ │ └── EONET.swift
│ │ │ │ └── Resources
│ │ │ │ └── nasa-logo.png
│ │ │ ├── OurPlanet.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ └── project.xcworkspace
│ │ │ │ └── contents.xcworkspacedata
│ │ │ └── Podfile
│ │ ├── challenge2-1
│ │ │ └── OurPlanet
│ │ │ ├── OurPlanet
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── background.imageset
│ │ │ │ │ │ ├── background.jpg
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CategoriesViewController.swift
│ │ │ │ ├── DownloadView.swift
│ │ │ │ ├── EventCell.swift
│ │ │ │ ├── EventsViewController.swift
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Model
│ │ │ │ │ ├── EOCategory.swift
│ │ │ │ │ ├── EOEnvelope.swift
│ │ │ │ │ ├── EOError.swift
│ │ │ │ │ ├── EOEvent.swift
│ │ │ │ │ ├── EOLocation.swift
│ │ │ │ │ └── EONET.swift
│ │ │ │ └── Resources
│ │ │ │ └── nasa-logo.png
│ │ │ ├── OurPlanet.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ └── project.xcworkspace
│ │ │ │ └── contents.xcworkspacedata
│ │ │ └── Podfile
│ │ └── challenge2-2
│ │ └── OurPlanet
│ │ ├── OurPlanet
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── background.imageset
│ │ │ │ │ ├── background.jpg
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── CategoriesViewController.swift
│ │ │ ├── DownloadView.swift
│ │ │ ├── EventCell.swift
│ │ │ ├── EventsViewController.swift
│ │ │ ├── Info.plist
│ │ │ ├── Model
│ │ │ │ ├── EOCategory.swift
│ │ │ │ ├── EOEnvelope.swift
│ │ │ │ ├── EOError.swift
│ │ │ │ ├── EOEvent.swift
│ │ │ │ ├── EOLocation.swift
│ │ │ │ └── EONET.swift
│ │ │ └── Resources
│ │ │ └── nasa-logo.png
│ │ ├── OurPlanet.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ ├── final
│ │ └── OurPlanet
│ │ ├── OurPlanet
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── background.imageset
│ │ │ │ │ ├── background.jpg
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── CategoriesViewController.swift
│ │ │ ├── EventCell.swift
│ │ │ ├── EventsViewController.swift
│ │ │ ├── Info.plist
│ │ │ ├── Model
│ │ │ │ ├── EOCategory.swift
│ │ │ │ ├── EOEnvelope.swift
│ │ │ │ ├── EOError.swift
│ │ │ │ ├── EOEvent.swift
│ │ │ │ ├── EOLocation.swift
│ │ │ │ └── EONET.swift
│ │ │ └── Resources
│ │ │ └── nasa-logo.png
│ │ ├── OurPlanet.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Podfile
│ └── starter
│ └── OurPlanet
│ ├── OurPlanet
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── background.imageset
│ │ │ │ ├── background.jpg
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── CategoriesViewController.swift
│ │ ├── EventCell.swift
│ │ ├── EventsViewController.swift
│ │ ├── Info.plist
│ │ ├── Model
│ │ │ ├── EOCategory.swift
│ │ │ ├── EOEnvelope.swift
│ │ │ ├── EOError.swift
│ │ │ ├── EOEvent.swift
│ │ │ ├── EOLocation.swift
│ │ │ └── EONET.swift
│ │ └── Resources
│ │ └── nasa-logo.png
│ ├── OurPlanet.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── Podfile
├── 11-time-based-operators
│ ├── challenge
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ ├── Pages
│ │ │ │ ├── buffer.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── delay.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── replay.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── timeout.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ └── window.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ └── Sources
│ │ │ ├── HostView.swift
│ │ │ ├── Label.swift
│ │ │ ├── StackView.swift
│ │ │ ├── SupportCode.swift
│ │ │ ├── TimelineViewBase.swift
│ │ │ └── Timer.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── final
│ │ ├── bootstrap.sh
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Contents.swift
│ │ │ ├── contents.xcplayground
│ │ │ ├── Pages
│ │ │ │ ├── buffer.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── delay.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── replay.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── timeout.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ └── window.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ └── Sources
│ │ │ ├── HostView.swift
│ │ │ ├── Label.swift
│ │ │ ├── StackView.swift
│ │ │ ├── SupportCode.swift
│ │ │ ├── TimelineViewBase.swift
│ │ │ └── Timer.swift
│ │ └── RxSwiftPlayground.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ ├── bootstrap.sh
│ ├── RxSwiftPlayground.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ ├── Pages
│ │ │ ├── buffer.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── delay.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── replay.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── timeout.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ └── window.xcplaygroundpage
│ │ │ └── Contents.swift
│ │ └── Sources
│ │ ├── HostView.swift
│ │ ├── Label.swift
│ │ ├── StackView.swift
│ │ ├── SupportCode.swift
│ │ ├── TimelineViewBase.swift
│ │ └── Timer.swift
│ └── RxSwiftPlayground.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 12-beginning-rxcocoa
│ ├── challenge
│ │ ├── Podfile
│ │ ├── Wundercast
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── LICENSE
│ │ │ │ └── weather.ttf
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ └── ApiController.swift
│ │ │ ├── Info.plist
│ │ │ ├── Utils
│ │ │ │ ├── Appearance.swift
│ │ │ │ └── Colors.swift
│ │ │ └── ViewController.swift
│ │ └── Wundercast.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ ├── Podfile
│ │ ├── Wundercast
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── LICENSE
│ │ │ │ └── weather.ttf
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ └── ApiController.swift
│ │ │ ├── Info.plist
│ │ │ ├── Utils
│ │ │ │ ├── Appearance.swift
│ │ │ │ └── Colors.swift
│ │ │ └── ViewController.swift
│ │ └── Wundercast.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ ├── Podfile
│ ├── Wundercast
│ │ ├── AppDelegate.swift
│ │ ├── Assets
│ │ │ ├── LICENSE
│ │ │ └── weather.ttf
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Controllers
│ │ │ └── ApiController.swift
│ │ ├── Info.plist
│ │ ├── Utils
│ │ │ ├── Appearance.swift
│ │ │ └── Colors.swift
│ │ └── ViewController.swift
│ └── Wundercast.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 13-intermediate-rxcocoa
│ ├── challenges
│ │ ├── Podfile
│ │ ├── Wundercast
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── LICENSE
│ │ │ │ └── weather.ttf
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── map.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── map.pdf
│ │ │ │ └── place-location.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── place-location.pdf
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ ├── ApiController.swift
│ │ │ │ └── Extensions
│ │ │ │ ├── CLLocationManager+Rx.swift
│ │ │ │ └── MKMapView+Rx.swift
│ │ │ ├── Info.plist
│ │ │ ├── Utils
│ │ │ │ ├── Appearance.swift
│ │ │ │ └── Colors.swift
│ │ │ └── ViewController.swift
│ │ └── Wundercast.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ ├── Podfile
│ │ ├── Wundercast
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── LICENSE
│ │ │ │ └── weather.ttf
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── map.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── map.pdf
│ │ │ │ └── place-location.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── place-location.pdf
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ ├── ApiController.swift
│ │ │ │ └── Extensions
│ │ │ │ ├── CLLocationManager+Rx.swift
│ │ │ │ └── MKMapView+Rx.swift
│ │ │ ├── Info.plist
│ │ │ ├── Utils
│ │ │ │ ├── Appearance.swift
│ │ │ │ └── Colors.swift
│ │ │ └── ViewController.swift
│ │ └── Wundercast.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ ├── Podfile
│ ├── Wundercast
│ │ ├── AppDelegate.swift
│ │ ├── Assets
│ │ │ ├── LICENSE
│ │ │ └── weather.ttf
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── map.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── map.pdf
│ │ │ └── place-location.imageset
│ │ │ ├── Contents.json
│ │ │ └── place-location.pdf
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Controllers
│ │ │ ├── ApiController.swift
│ │ │ └── Extensions
│ │ │ ├── CLLocationManager+Rx.swift
│ │ │ └── MKMapView+Rx.swift
│ │ ├── Info.plist
│ │ ├── Utils
│ │ │ ├── Appearance.swift
│ │ │ └── Colors.swift
│ │ └── ViewController.swift
│ └── Wundercast.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 14-error-handling-in-practice
│ ├── challenge
│ │ ├── Podfile
│ │ ├── Wundercast
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── LICENSE
│ │ │ │ └── weather.ttf
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── closeSmall.imageset
│ │ │ │ │ ├── closeSmall.pdf
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── key.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── key.pdf
│ │ │ │ ├── map.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── map.pdf
│ │ │ │ └── place-location.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── place-location.pdf
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ └── ApiController.swift
│ │ │ ├── Extensions
│ │ │ │ ├── CLLocationManager+Rx.swift
│ │ │ │ └── RxReachability.swift
│ │ │ ├── Info.plist
│ │ │ ├── Utils
│ │ │ │ ├── Appearance.swift
│ │ │ │ ├── Colors.swift
│ │ │ │ ├── InfoView.swift
│ │ │ │ └── InfoView.xib
│ │ │ └── ViewController.swift
│ │ └── Wundercast.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ ├── Podfile
│ │ ├── Wundercast
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── LICENSE
│ │ │ │ └── weather.ttf
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── closeSmall.imageset
│ │ │ │ │ ├── closeSmall.pdf
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── key.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── key.pdf
│ │ │ │ ├── map.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── map.pdf
│ │ │ │ └── place-location.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── place-location.pdf
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ └── ApiController.swift
│ │ │ ├── Extensions
│ │ │ │ ├── CLLocationManager+Rx.swift
│ │ │ │ └── RxReachability.swift
│ │ │ ├── Info.plist
│ │ │ ├── Utils
│ │ │ │ ├── Appearance.swift
│ │ │ │ ├── Colors.swift
│ │ │ │ ├── InfoView.swift
│ │ │ │ └── InfoView.xib
│ │ │ └── ViewController.swift
│ │ └── Wundercast.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ ├── Podfile
│ ├── Wundercast
│ │ ├── AppDelegate.swift
│ │ ├── Assets
│ │ │ ├── LICENSE
│ │ │ └── weather.ttf
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── closeSmall.imageset
│ │ │ │ ├── closeSmall.pdf
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── key.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── key.pdf
│ │ │ ├── map.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── map.pdf
│ │ │ └── place-location.imageset
│ │ │ ├── Contents.json
│ │ │ └── place-location.pdf
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Controllers
│ │ │ └── ApiController.swift
│ │ ├── Extensions
│ │ │ ├── CLLocationManager+Rx.swift
│ │ │ └── RxReachability.swift
│ │ ├── Info.plist
│ │ ├── Utils
│ │ │ ├── Appearance.swift
│ │ │ ├── Colors.swift
│ │ │ ├── InfoView.swift
│ │ │ └── InfoView.xib
│ │ └── ViewController.swift
│ └── Wundercast.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 15-intro-to-schedulers
│ ├── final
│ │ ├── Podfile
│ │ ├── Schedulers
│ │ │ ├── main.swift
│ │ │ └── Utils.swift
│ │ └── Schedulers.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ ├── Podfile
│ ├── Schedulers
│ │ ├── main.swift
│ │ └── Utils.swift
│ └── Schedulers.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 16-testing-with-rxtests
│ ├── final
│ │ └── Testing
│ │ ├── Base.lproj
│ │ │ └── LaunchScreen.storyboard
│ │ ├── Podfile
│ │ ├── Testing
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Info.plist
│ │ │ ├── Main.storyboard
│ │ │ ├── ViewController.swift
│ │ │ └── ViewModel.swift
│ │ ├── TestingTests
│ │ │ ├── Info.plist
│ │ │ ├── TestingOperators.swift
│ │ │ └── TestingViewModel.swift
│ │ └── Testing.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── starter
│ └── Testing
│ ├── Base.lproj
│ │ └── LaunchScreen.storyboard
│ ├── Podfile
│ ├── Testing
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Info.plist
│ │ ├── Main.storyboard
│ │ ├── ViewController.swift
│ │ └── ViewModel.swift
│ ├── TestingTests
│ │ ├── Info.plist
│ │ ├── TestingOperators.swift
│ │ └── TestingViewModel.swift
│ └── Testing.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── 17-creating-custom-reactive-extension
│ ├── challenge
│ │ ├── iGif
│ │ │ ├── ApiController.swift
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GifTableViewCell.swift
│ │ │ ├── GiphyGif.swift
│ │ │ ├── GiphySearchResponse.swift
│ │ │ ├── Info.plist
│ │ │ ├── MainTableViewController.swift
│ │ │ └── URLSession+Rx.swift
│ │ ├── iGifTests
│ │ │ ├── iGifTests.swift
│ │ │ └── Info.plist
│ │ ├── iGif.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ ├── final
│ │ ├── iGif
│ │ │ ├── ApiController.swift
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GifTableViewCell.swift
│ │ │ ├── GiphyGif.swift
│ │ │ ├── GiphySearchResponse.swift
│ │ │ ├── Info.plist
│ │ │ ├── MainTableViewController.swift
│ │ │ └── URLSession+Rx.swift
│ │ ├── iGifTests
│ │ │ ├── iGifTests.swift
│ │ │ └── Info.plist
│ │ ├── iGif.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── Podfile
│ └── starter
│ ├── iGif
│ │ ├── ApiController.swift
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GifTableViewCell.swift
│ │ ├── GiphyGif.swift
│ │ ├── GiphySearchResponse.swift
│ │ ├── Info.plist
│ │ ├── MainTableViewController.swift
│ │ └── URLSession+Rx.swift
│ ├── iGifTests
│ │ ├── iGifTests.swift
│ │ └── Info.plist
│ ├── iGif.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── Podfile
├── 24-mvvm-with-rxswift
│ ├── challenges
│ │ └── Tweetie
│ │ ├── APICache
│ │ │ └── 1.1
│ │ │ ├── lists
│ │ │ │ ├── members.json-count-100-include_entities-false-owner_screen_name-icanzilb-skip_status-1-slug-RxSwift
│ │ │ │ ├── statuses.json-max_id-1070684513213267967-owner_screen_name-icanzilb-since_id-1071396963340435457-slug-RxSwift
│ │ │ │ └── statuses.json-owner_screen_name-icanzilb-slug-RxSwift
│ │ │ └── statuses
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-ashfurrow
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-bontoJR
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-crispytwit
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-fpillet
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-freak4pc
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-icanzilb
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-mandarazeware
│ │ │ └── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-scotteg
│ │ ├── Cross Platform Extensions
│ │ │ ├── ImageView+setImage.swift
│ │ │ ├── Reachability+.swift
│ │ │ ├── Storyboard+.swift
│ │ │ └── TableView+.swift
│ │ ├── Data Entities
│ │ │ ├── Tweet.swift
│ │ │ └── User.swift
│ │ ├── iOS Tweetie
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── Info.plist
│ │ │ ├── Extensions
│ │ │ │ └── Tweet+.swift
│ │ │ ├── Navigator.swift
│ │ │ └── View Controllers
│ │ │ ├── List People
│ │ │ │ ├── ListPeopleViewController.swift
│ │ │ │ └── UserCellView.swift
│ │ │ ├── List Timeline
│ │ │ │ ├── ListTimelineViewController.swift
│ │ │ │ └── TweetCellView.swift
│ │ │ └── Person Timeline
│ │ │ └── PersonTimelineViewController.swift
│ │ ├── Mac Tweetie
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── Info.plist
│ │ │ ├── Extensions
│ │ │ │ └── ChromelessWindow.swift
│ │ │ ├── Navigator.swift
│ │ │ └── ViewControllers
│ │ │ ├── List People
│ │ │ │ ├── ListPeopleViewController.swift
│ │ │ │ └── UserCellView.swift
│ │ │ ├── List Timeline
│ │ │ │ ├── ListTimelineViewController.swift
│ │ │ │ └── TweetCellView.swift
│ │ │ └── Person Timeline
│ │ │ └── PersonTimelineViewController.swift
│ │ ├── Podfile
│ │ ├── TweetieTests
│ │ │ ├── Info.plist
│ │ │ ├── ListPeopleViewModelTests.swift
│ │ │ ├── ListTimelineViewModelTests.swift
│ │ │ ├── PersonTimelineViewModelTests.swift
│ │ │ ├── TestData.swift
│ │ │ ├── TestRealm.swift
│ │ │ └── TwitterTestAPI.swift
│ │ ├── Tweetie.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── TwitterAPI
│ │ │ ├── DateFormatter+Twitter.swift
│ │ │ ├── Timeline
│ │ │ │ ├── TimelineCursor.swift
│ │ │ │ └── TimelineFetcher.swift
│ │ │ ├── TwitterAccount.swift
│ │ │ └── TwitterAPI.swift
│ │ └── View Models
│ │ ├── ListPeopleViewModel.swift
│ │ ├── ListTimelineViewModel.swift
│ │ └── PersonTimelineViewModel.swift
│ ├── final
│ │ └── Tweetie
│ │ ├── APICache
│ │ │ └── 1.1
│ │ │ ├── lists
│ │ │ │ ├── members.json-count-100-include_entities-false-owner_screen_name-icanzilb-skip_status-1-slug-RxSwift
│ │ │ │ ├── statuses.json-max_id-1070684513213267967-owner_screen_name-icanzilb-since_id-1071396963340435457-slug-RxSwift
│ │ │ │ └── statuses.json-owner_screen_name-icanzilb-slug-RxSwift
│ │ │ └── statuses
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-ashfurrow
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-bontoJR
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-crispytwit
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-fpillet
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-freak4pc
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-icanzilb
│ │ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-mandarazeware
│ │ │ └── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-scotteg
│ │ ├── Cross Platform Extensions
│ │ │ ├── ImageView+setImage.swift
│ │ │ ├── Reachability+.swift
│ │ │ ├── Storyboard+.swift
│ │ │ └── TableView+.swift
│ │ ├── Data Entities
│ │ │ ├── Tweet.swift
│ │ │ └── User.swift
│ │ ├── iOS Tweetie
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── Info.plist
│ │ │ ├── Extensions
│ │ │ │ └── Tweet+.swift
│ │ │ ├── Navigator.swift
│ │ │ └── View Controllers
│ │ │ ├── List People
│ │ │ │ ├── ListPeopleViewController.swift
│ │ │ │ └── UserCellView.swift
│ │ │ ├── List Timeline
│ │ │ │ ├── ListTimelineViewController.swift
│ │ │ │ └── TweetCellView.swift
│ │ │ └── Person Timeline
│ │ │ └── PersonTimelineViewController.swift
│ │ ├── Mac Tweetie
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── Info.plist
│ │ │ ├── Extensions
│ │ │ │ └── ChromelessWindow.swift
│ │ │ ├── Navigator.swift
│ │ │ └── ViewControllers
│ │ │ ├── List People
│ │ │ │ ├── ListPeopleViewController.swift
│ │ │ │ └── UserCellView.swift
│ │ │ ├── List Timeline
│ │ │ │ ├── ListTimelineViewController.swift
│ │ │ │ └── TweetCellView.swift
│ │ │ └── Person Timeline
│ │ │ └── PersonTimelineViewController.swift
│ │ ├── Podfile
│ │ ├── TweetieTests
│ │ │ ├── Info.plist
│ │ │ ├── ListPeopleViewModelTests.swift
│ │ │ ├── ListTimelineViewModelTests.swift
│ │ │ ├── PersonTimelineViewModelTests.swift
│ │ │ ├── TestData.swift
│ │ │ ├── TestRealm.swift
│ │ │ └── TwitterTestAPI.swift
│ │ ├── Tweetie.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── TwitterAPI
│ │ │ ├── DateFormatter+Twitter.swift
│ │ │ ├── Timeline
│ │ │ │ ├── TimelineCursor.swift
│ │ │ │ └── TimelineFetcher.swift
│ │ │ ├── TwitterAccount.swift
│ │ │ └── TwitterAPI.swift
│ │ └── View Models
│ │ ├── ListPeopleViewModel.swift
│ │ ├── ListTimelineViewModel.swift
│ │ └── PersonTimelineViewModel.swift
│ └── starter
│ └── Tweetie
│ ├── APICache
│ │ └── 1.1
│ │ ├── lists
│ │ │ ├── members.json-count-100-include_entities-false-owner_screen_name-icanzilb-skip_status-1-slug-RxSwift
│ │ │ ├── statuses.json-max_id-1070684513213267967-owner_screen_name-icanzilb-since_id-1071396963340435457-slug-RxSwift
│ │ │ └── statuses.json-owner_screen_name-icanzilb-slug-RxSwift
│ │ └── statuses
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-ashfurrow
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-bontoJR
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-crispytwit
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-fpillet
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-freak4pc
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-icanzilb
│ │ ├── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-mandarazeware
│ │ └── user_timeline.json-contributor_details-false-count-100-include_rts-true-screen_name-scotteg
│ ├── Cross Platform Extensions
│ │ ├── ImageView+setImage.swift
│ │ ├── Reachability+.swift
│ │ ├── Storyboard+.swift
│ │ └── TableView+.swift
│ ├── Data Entities
│ │ ├── Tweet.swift
│ │ └── User.swift
│ ├── iOS Tweetie
│ │ ├── AppDelegate.swift
│ │ ├── Assets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ └── Info.plist
│ │ ├── Extensions
│ │ │ └── Tweet+.swift
│ │ ├── Navigator.swift
│ │ └── View Controllers
│ │ ├── List People
│ │ │ ├── ListPeopleViewController.swift
│ │ │ └── UserCellView.swift
│ │ ├── List Timeline
│ │ │ ├── ListTimelineViewController.swift
│ │ │ └── TweetCellView.swift
│ │ └── Person Timeline
│ │ └── PersonTimelineViewController.swift
│ ├── Mac Tweetie
│ │ ├── AppDelegate.swift
│ │ ├── Assets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ └── Info.plist
│ │ ├── Extensions
│ │ │ └── ChromelessWindow.swift
│ │ ├── Navigator.swift
│ │ └── ViewControllers
│ │ ├── List People
│ │ │ ├── ListPeopleViewController.swift
│ │ │ └── UserCellView.swift
│ │ ├── List Timeline
│ │ │ ├── ListTimelineViewController.swift
│ │ │ └── TweetCellView.swift
│ │ └── Person Timeline
│ │ └── PersonTimelineViewController.swift
│ ├── Podfile
│ ├── TweetieTests
│ │ ├── Info.plist
│ │ ├── ListPeopleViewModelTests.swift
│ │ ├── ListTimelineViewModelTests.swift
│ │ ├── PersonTimelineViewModelTests.swift
│ │ ├── TestData.swift
│ │ ├── TestRealm.swift
│ │ └── TwitterTestAPI.swift
│ ├── Tweetie.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── TwitterAPI
│ │ ├── DateFormatter+Twitter.swift
│ │ ├── Timeline
│ │ │ ├── TimelineCursor.swift
│ │ │ └── TimelineFetcher.swift
│ │ ├── TwitterAccount.swift
│ │ └── TwitterAPI.swift
│ └── View Models
│ ├── ListPeopleViewModel.swift
│ ├── ListTimelineViewModel.swift
│ └── PersonTimelineViewModel.swift
├── 25-building-complete-rxswift-app
│ ├── challenge
│ │ ├── challenge3
│ │ │ └── QuickTodo
│ │ │ ├── Podfile
│ │ │ ├── QuickTodo
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ItemChecked.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ItemChecked@2x.png
│ │ │ │ │ │ └── ItemChecked@3x.png
│ │ │ │ │ └── ItemNotChecked.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ItemNotChecked@2x.png
│ │ │ │ │ └── ItemNotChecked@3x.png
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Cells
│ │ │ │ │ └── TaskItemTableViewCell.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── EditTaskViewController.swift
│ │ │ │ │ ├── EditTaskViewModel.swift
│ │ │ │ │ ├── PushedEditTaskViewController.swift
│ │ │ │ │ ├── PushedEditTaskViewModel.swift
│ │ │ │ │ ├── TasksViewController.swift
│ │ │ │ │ └── TasksViewModel.swift
│ │ │ │ ├── Extensions
│ │ │ │ │ └── UINavigationController+Rx.swift
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Model
│ │ │ │ │ ├── BindableType.swift
│ │ │ │ │ └── TaskItem.swift
│ │ │ │ ├── Scenes
│ │ │ │ │ ├── SceneCoordinator.swift
│ │ │ │ │ ├── SceneCoordinatorType.swift
│ │ │ │ │ ├── Scene.swift
│ │ │ │ │ ├── SceneTransitionType.swift
│ │ │ │ │ └── Scene+ViewController.swift
│ │ │ │ └── Services
│ │ │ │ ├── TaskService.swift
│ │ │ │ └── TaskServiceType.swift
│ │ │ └── QuickTodo.xcodeproj
│ │ │ └── project.pbxproj
│ │ └── challenges1-2
│ │ └── QuickTodo
│ │ ├── Podfile
│ │ ├── QuickTodo
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ItemChecked.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ItemChecked@2x.png
│ │ │ │ │ └── ItemChecked@3x.png
│ │ │ │ └── ItemNotChecked.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ItemNotChecked@2x.png
│ │ │ │ └── ItemNotChecked@3x.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Cells
│ │ │ │ └── TaskItemTableViewCell.swift
│ │ │ ├── Controllers
│ │ │ │ ├── EditTaskViewController.swift
│ │ │ │ ├── EditTaskViewModel.swift
│ │ │ │ ├── TasksViewController.swift
│ │ │ │ └── TasksViewModel.swift
│ │ │ ├── Extensions
│ │ │ │ └── UINavigationController+Rx.swift
│ │ │ ├── Info.plist
│ │ │ ├── Model
│ │ │ │ ├── BindableType.swift
│ │ │ │ └── TaskItem.swift
│ │ │ ├── Scenes
│ │ │ │ ├── SceneCoordinator.swift
│ │ │ │ ├── SceneCoordinatorType.swift
│ │ │ │ ├── Scene.swift
│ │ │ │ ├── SceneTransitionType.swift
│ │ │ │ └── Scene+ViewController.swift
│ │ │ └── Services
│ │ │ ├── TaskService.swift
│ │ │ └── TaskServiceType.swift
│ │ └── QuickTodo.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── QuickTodo
│ │ ├── Podfile
│ │ ├── QuickTodo
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ItemChecked.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ItemChecked@2x.png
│ │ │ │ │ └── ItemChecked@3x.png
│ │ │ │ └── ItemNotChecked.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ItemNotChecked@2x.png
│ │ │ │ └── ItemNotChecked@3x.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Cells
│ │ │ │ └── TaskItemTableViewCell.swift
│ │ │ ├── Controllers
│ │ │ │ ├── EditTaskViewController.swift
│ │ │ │ ├── EditTaskViewModel.swift
│ │ │ │ ├── TasksViewController.swift
│ │ │ │ └── TasksViewModel.swift
│ │ │ ├── Extensions
│ │ │ │ └── UINavigationController+Rx.swift
│ │ │ ├── Info.plist
│ │ │ ├── Model
│ │ │ │ ├── BindableType.swift
│ │ │ │ └── TaskItem.swift
│ │ │ ├── Scenes
│ │ │ │ ├── SceneCoordinator.swift
│ │ │ │ ├── SceneCoordinatorType.swift
│ │ │ │ ├── Scene.swift
│ │ │ │ ├── SceneTransitionType.swift
│ │ │ │ └── Scene+ViewController.swift
│ │ │ └── Services
│ │ │ ├── TaskService.swift
│ │ │ └── TaskServiceType.swift
│ │ └── QuickTodo.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── QuickTodo
│ ├── Podfile
│ ├── QuickTodo
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── ItemChecked.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ItemChecked@2x.png
│ │ │ │ └── ItemChecked@3x.png
│ │ │ └── ItemNotChecked.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ItemNotChecked@2x.png
│ │ │ └── ItemNotChecked@3x.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Cells
│ │ │ └── TaskItemTableViewCell.swift
│ │ ├── Controllers
│ │ │ ├── EditTaskViewController.swift
│ │ │ ├── EditTaskViewModel.swift
│ │ │ ├── TasksViewController.swift
│ │ │ └── TasksViewModel.swift
│ │ ├── Extensions
│ │ │ └── UINavigationController+Rx.swift
│ │ ├── Info.plist
│ │ ├── Model
│ │ │ ├── BindableType.swift
│ │ │ └── TaskItem.swift
│ │ ├── Scenes
│ │ │ ├── SceneCoordinator.swift
│ │ │ ├── SceneCoordinatorType.swift
│ │ │ ├── Scene.swift
│ │ │ ├── SceneTransitionType.swift
│ │ │ └── Scene+ViewController.swift
│ │ └── Services
│ │ ├── TaskService.swift
│ │ └── TaskServiceType.swift
│ └── QuickTodo.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── __MACOSX
│ ├── 02-observable-pg
│ │ ├── challenge
│ │ │ ├── Challenge1-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── Challenge1-Starter
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── Challenge2-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Challenge2-Starter
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── final
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── projects
│ │ │ ├── challenge
│ │ │ │ ├── Challenge1-Finished
│ │ │ │ │ └── RxPlayground
│ │ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ │ └── Sources
│ │ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ │ └── xcshareddata
│ │ │ │ ├── Challenge1-Starter
│ │ │ │ │ └── RxPlayground
│ │ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ │ └── Sources
│ │ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ │ └── xcshareddata
│ │ │ │ ├── Challenge2-Finished
│ │ │ │ │ └── RxPlayground
│ │ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ │ └── Sources
│ │ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ │ └── xcshareddata
│ │ │ │ └── Challenge2-Starter
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── final
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── starter
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ └── RxPlayground
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ └── RxSwiftPlayground.xcworkspace
│ │ └── xcshareddata
│ ├── 03-subjects
│ │ ├── challenge
│ │ │ ├── Challenge1-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── Challenge1-Starter
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── Challenge2-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Challenge2-Starter
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── final
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ └── RxPlayground
│ │ ├── RxSwiftPlayground.playground
│ │ │ └── Sources
│ │ └── RxSwiftPlayground.xcworkspace
│ │ └── xcshareddata
│ ├── 04-observables-in-practice
│ │ ├── challenges
│ │ │ ├── Combinestagram
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── IMG_1907.imageset
│ │ │ │ └── Base.lproj
│ │ │ └── Combinestagram.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ ├── Combinestagram
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── IMG_1907.imageset
│ │ │ │ └── Base.lproj
│ │ │ └── Combinestagram.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── Combinestagram
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── IMG_1907.imageset
│ │ │ └── Base.lproj
│ │ └── Combinestagram.xcodeproj
│ │ └── project.xcworkspace
│ │ └── xcshareddata
│ ├── 05-filtering-operators
│ │ ├── challenge
│ │ │ ├── Challenge1-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Challenge1-Starter
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── final
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ └── RxPlayground
│ │ ├── RxSwiftPlayground.playground
│ │ │ └── Sources
│ │ └── RxSwiftPlayground.xcworkspace
│ │ └── xcshareddata
│ ├── 06-filtering-operators-in-practice
│ │ ├── final
│ │ │ ├── Combinestagram
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── IMG_1907.imageset
│ │ │ │ └── Base.lproj
│ │ │ └── Combinestagram.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── Combinestagram
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── IMG_1907.imageset
│ │ │ └── Base.lproj
│ │ └── Combinestagram.xcodeproj
│ │ └── project.xcworkspace
│ ├── 07-transforming-operators
│ │ ├── challenge
│ │ │ ├── Challenge1-Finished
│ │ │ │ └── RxPlayground
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Challenge1-Starter
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── final
│ │ │ └── RxPlayground
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ └── RxPlayground
│ │ ├── RxSwiftPlayground.playground
│ │ │ └── Sources
│ │ └── RxSwiftPlayground.xcworkspace
│ │ └── xcshareddata
│ ├── 08-transforming-operators-in-practice
│ │ ├── challenges
│ │ │ ├── GitFeed
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── blank-avatar.imageset
│ │ │ │ └── Base.lproj
│ │ │ └── GitFeed.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ ├── GitFeed
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── blank-avatar.imageset
│ │ │ │ └── Base.lproj
│ │ │ └── GitFeed.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── GitFeed
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── blank-avatar.imageset
│ │ │ └── Base.lproj
│ │ └── GitFeed.xcodeproj
│ │ └── project.xcworkspace
│ ├── 09-combining-operators
│ │ ├── challenge
│ │ │ ├── Challenge1-Finished
│ │ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Challenge1-Starter
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── final
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ └── RxSwiftPlayground.xcworkspace
│ │ └── xcshareddata
│ ├── 10-combining-operators-in-practice
│ │ ├── challenge
│ │ │ ├── challenge1
│ │ │ │ └── OurPlanet
│ │ │ │ ├── OurPlanet
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ └── background.imageset
│ │ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── Model
│ │ │ │ │ └── Resources
│ │ │ │ └── OurPlanet.xcodeproj
│ │ │ │ └── project.xcworkspace
│ │ │ ├── challenge2-1
│ │ │ │ └── OurPlanet
│ │ │ │ ├── OurPlanet
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ └── background.imageset
│ │ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── Model
│ │ │ │ │ └── Resources
│ │ │ │ └── OurPlanet.xcodeproj
│ │ │ │ └── project.xcworkspace
│ │ │ └── challenge2-2
│ │ │ └── OurPlanet
│ │ │ ├── OurPlanet
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── background.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Model
│ │ │ │ └── Resources
│ │ │ └── OurPlanet.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── OurPlanet
│ │ │ ├── OurPlanet
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── background.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Model
│ │ │ │ └── Resources
│ │ │ └── OurPlanet.xcodeproj
│ │ │ └── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ └── OurPlanet
│ │ ├── OurPlanet
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── background.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Model
│ │ │ └── Resources
│ │ └── OurPlanet.xcodeproj
│ │ └── project.xcworkspace
│ │ └── xcshareddata
│ ├── 11-time-based-operators
│ │ ├── challenge
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Pages
│ │ │ │ │ ├── buffer.xcplaygroundpage
│ │ │ │ │ ├── delay.xcplaygroundpage
│ │ │ │ │ ├── replay.xcplaygroundpage
│ │ │ │ │ ├── timeout.xcplaygroundpage
│ │ │ │ │ └── window.xcplaygroundpage
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── final
│ │ │ ├── RxSwiftPlayground.playground
│ │ │ │ ├── Pages
│ │ │ │ │ ├── buffer.xcplaygroundpage
│ │ │ │ │ ├── delay.xcplaygroundpage
│ │ │ │ │ ├── replay.xcplaygroundpage
│ │ │ │ │ ├── timeout.xcplaygroundpage
│ │ │ │ │ └── window.xcplaygroundpage
│ │ │ │ └── Sources
│ │ │ └── RxSwiftPlayground.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ ├── RxSwiftPlayground.playground
│ │ │ ├── Pages
│ │ │ │ ├── buffer.xcplaygroundpage
│ │ │ │ ├── delay.xcplaygroundpage
│ │ │ │ ├── replay.xcplaygroundpage
│ │ │ │ ├── timeout.xcplaygroundpage
│ │ │ │ └── window.xcplaygroundpage
│ │ │ └── Sources
│ │ └── RxSwiftPlayground.xcworkspace
│ │ └── xcshareddata
│ ├── 12-beginning-rxcocoa
│ │ ├── challenge
│ │ │ ├── Wundercast
│ │ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Controllers
│ │ │ │ └── Utils
│ │ │ └── Wundercast.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ ├── Wundercast
│ │ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Controllers
│ │ │ │ └── Utils
│ │ │ └── Wundercast.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── Wundercast
│ │ │ ├── Assets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ └── Utils
│ │ └── Wundercast.xcodeproj
│ │ └── project.xcworkspace
│ ├── 13-intermediate-rxcocoa
│ │ ├── challenges
│ │ │ ├── Wundercast
│ │ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── map.imageset
│ │ │ │ │ └── place-location.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Controllers
│ │ │ │ │ └── Extensions
│ │ │ │ └── Utils
│ │ │ └── Wundercast.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ ├── Wundercast
│ │ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── map.imageset
│ │ │ │ │ └── place-location.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Controllers
│ │ │ │ │ └── Extensions
│ │ │ │ └── Utils
│ │ │ └── Wundercast.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── Wundercast
│ │ │ ├── Assets
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── map.imageset
│ │ │ │ └── place-location.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ │ └── Extensions
│ │ │ └── Utils
│ │ └── Wundercast.xcodeproj
│ │ └── project.xcworkspace
│ ├── 14-error-handling-in-practice
│ │ ├── challenge
│ │ │ ├── Wundercast
│ │ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── closeSmall.imageset
│ │ │ │ │ ├── key.imageset
│ │ │ │ │ ├── map.imageset
│ │ │ │ │ └── place-location.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Controllers
│ │ │ │ ├── Extensions
│ │ │ │ └── Utils
│ │ │ └── Wundercast.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ ├── Wundercast
│ │ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── closeSmall.imageset
│ │ │ │ │ ├── key.imageset
│ │ │ │ │ ├── map.imageset
│ │ │ │ │ └── place-location.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Controllers
│ │ │ │ ├── Extensions
│ │ │ │ └── Utils
│ │ │ └── Wundercast.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── Wundercast
│ │ │ ├── Assets
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── closeSmall.imageset
│ │ │ │ ├── key.imageset
│ │ │ │ ├── map.imageset
│ │ │ │ └── place-location.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ ├── Extensions
│ │ │ └── Utils
│ │ └── Wundercast.xcodeproj
│ │ └── project.xcworkspace
│ ├── 15-intro-to-schedulers
│ │ ├── final
│ │ │ ├── Schedulers
│ │ │ └── Schedulers.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── Schedulers
│ │ └── Schedulers.xcodeproj
│ │ └── project.xcworkspace
│ ├── 16-testing-with-rxtests
│ │ ├── final
│ │ │ └── Testing
│ │ │ ├── Base.lproj
│ │ │ ├── Testing
│ │ │ │ └── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ ├── TestingTests
│ │ │ └── Testing.xcodeproj
│ │ │ └── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── starter
│ │ └── Testing
│ │ ├── Base.lproj
│ │ ├── Testing
│ │ │ └── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ ├── TestingTests
│ │ └── Testing.xcodeproj
│ │ └── project.xcworkspace
│ │ └── xcshareddata
│ ├── 17-creating-custom-reactive-extension
│ │ ├── challenge
│ │ │ ├── iGif
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ ├── iGifTests
│ │ │ └── iGif.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ ├── iGif
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ ├── iGifTests
│ │ │ └── iGif.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── iGif
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ └── Base.lproj
│ │ ├── iGifTests
│ │ └── iGif.xcodeproj
│ │ └── project.xcworkspace
│ ├── 24-mvvm-with-rxswift
│ │ ├── challenges
│ │ │ └── Tweetie
│ │ │ ├── APICache
│ │ │ │ └── 1.1
│ │ │ │ ├── lists
│ │ │ │ └── statuses
│ │ │ ├── Cross Platform Extensions
│ │ │ ├── Data Entities
│ │ │ ├── iOS Tweetie
│ │ │ │ ├── Assets
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Base.lproj
│ │ │ │ ├── Extensions
│ │ │ │ └── View Controllers
│ │ │ │ ├── List People
│ │ │ │ ├── List Timeline
│ │ │ │ └── Person Timeline
│ │ │ ├── Mac Tweetie
│ │ │ │ ├── Assets
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Base.lproj
│ │ │ │ ├── Extensions
│ │ │ │ └── ViewControllers
│ │ │ │ ├── List People
│ │ │ │ ├── List Timeline
│ │ │ │ └── Person Timeline
│ │ │ ├── TweetieTests
│ │ │ ├── Tweetie.xcodeproj
│ │ │ │ └── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── TwitterAPI
│ │ │ │ └── Timeline
│ │ │ └── View Models
│ │ ├── final
│ │ │ └── Tweetie
│ │ │ ├── APICache
│ │ │ │ └── 1.1
│ │ │ │ ├── lists
│ │ │ │ └── statuses
│ │ │ ├── Cross Platform Extensions
│ │ │ ├── Data Entities
│ │ │ ├── iOS Tweetie
│ │ │ │ ├── Assets
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Base.lproj
│ │ │ │ ├── Extensions
│ │ │ │ └── View Controllers
│ │ │ │ ├── List People
│ │ │ │ ├── List Timeline
│ │ │ │ └── Person Timeline
│ │ │ ├── Mac Tweetie
│ │ │ │ ├── Assets
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ └── Base.lproj
│ │ │ │ ├── Extensions
│ │ │ │ └── ViewControllers
│ │ │ │ ├── List People
│ │ │ │ ├── List Timeline
│ │ │ │ └── Person Timeline
│ │ │ ├── TweetieTests
│ │ │ ├── Tweetie.xcodeproj
│ │ │ │ └── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── TwitterAPI
│ │ │ │ └── Timeline
│ │ │ └── View Models
│ │ └── starter
│ │ └── Tweetie
│ │ ├── APICache
│ │ │ └── 1.1
│ │ │ ├── lists
│ │ │ └── statuses
│ │ ├── Cross Platform Extensions
│ │ ├── Data Entities
│ │ ├── iOS Tweetie
│ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ ├── Extensions
│ │ │ └── View Controllers
│ │ │ ├── List People
│ │ │ ├── List Timeline
│ │ │ └── Person Timeline
│ │ ├── Mac Tweetie
│ │ │ ├── Assets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ ├── Extensions
│ │ │ └── ViewControllers
│ │ │ ├── List People
│ │ │ ├── List Timeline
│ │ │ └── Person Timeline
│ │ ├── TweetieTests
│ │ ├── Tweetie.xcodeproj
│ │ │ └── project.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── TwitterAPI
│ │ │ └── Timeline
│ │ └── View Models
│ └── 25-building-complete-rxswift-app
│ ├── challenge
│ │ ├── challenge3
│ │ │ └── QuickTodo
│ │ │ ├── QuickTodo
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── ItemChecked.imageset
│ │ │ │ │ └── ItemNotChecked.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Cells
│ │ │ │ ├── Controllers
│ │ │ │ ├── Extensions
│ │ │ │ ├── Model
│ │ │ │ ├── Scenes
│ │ │ │ └── Services
│ │ │ └── QuickTodo.xcodeproj
│ │ └── challenges1-2
│ │ └── QuickTodo
│ │ ├── QuickTodo
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ItemChecked.imageset
│ │ │ │ └── ItemNotChecked.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Cells
│ │ │ ├── Controllers
│ │ │ ├── Extensions
│ │ │ ├── Model
│ │ │ ├── Scenes
│ │ │ └── Services
│ │ └── QuickTodo.xcodeproj
│ │ └── project.xcworkspace
│ ├── final
│ │ └── QuickTodo
│ │ ├── QuickTodo
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ItemChecked.imageset
│ │ │ │ └── ItemNotChecked.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Cells
│ │ │ ├── Controllers
│ │ │ ├── Extensions
│ │ │ ├── Model
│ │ │ ├── Scenes
│ │ │ └── Services
│ │ └── QuickTodo.xcodeproj
│ │ └── project.xcworkspace
│ └── starter
│ └── QuickTodo
│ ├── QuickTodo
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ItemChecked.imageset
│ │ │ └── ItemNotChecked.imageset
│ │ ├── Base.lproj
│ │ ├── Cells
│ │ ├── Controllers
│ │ ├── Extensions
│ │ ├── Model
│ │ ├── Scenes
│ │ └── Services
│ └── QuickTodo.xcodeproj
│ └── project.xcworkspace
│ └── xcshareddata
├── RxSwift_Reactive_Programming_with_Swift_v3.0.epub
└── RxSwift_Reactive_Programming_with_Swift_v3.0.pdf
1403 directories, 1084 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论