实例介绍
Raywendlich 的 Design Patterns by Tutorials v2.0 (iOS12 & Swift4.2 & Xcode10),包含pdf, epub 两种格式 附有源代码
【实例截图】
【核心代码】
54f51a4c-d898-4139-af71-f65b8c370d02
├── Design Patterns by Tutorials v2.0
│ ├── 03-model-view-controller-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Controllers
│ │ │ │ │ └── QuestionViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ ├── resources
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── ic_menu.pdf
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── ic_settings.pdf
│ │ │ │ └── logo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── logo.pdf
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── QuestionGroupData.swift
│ │ └── starter
│ │ └── FundamentalDesignPatterns.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ ├── contents.xcplayground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Builder_Diagram.png
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Delegation_Diagram.png
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Memento_Diagram.png
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── MVC_Diagram.png
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── Resources
│ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ └── Sources
│ │ │ │ └── Observable.swift
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Singleton_Diagram.png
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ ├── Contents.swift
│ │ │ └── Resources
│ │ │ └── Strategy_Diagram.png
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 04-delegation-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── QuestionViewController.swift
│ │ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ ├── QuestionGroupCell.swift
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Observable.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Strategy_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ └── QuestionViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ ├── QuestionGroup.swift
│ │ │ │ └── Question.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── logo.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── logo.pdf
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── QuestionView.swift
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 05-strategy-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── QuestionViewController.swift
│ │ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── Strategies
│ │ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ ├── QuestionGroupCell.swift
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Observable.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Strategy_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ ├── QuestionViewController.swift
│ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ ├── QuestionGroup.swift
│ │ │ │ └── Question.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── logo.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── logo.pdf
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── QuestionGroupCell.swift
│ │ │ └── QuestionView.swift
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 06-singleton-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ │ ├── QuestionViewController.swift
│ │ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── AppSettings.swift
│ │ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── Strategies
│ │ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ ├── QuestionGroupCell.swift
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Observable.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Strategy_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ ├── QuestionViewController.swift
│ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ ├── QuestionGroup.swift
│ │ │ │ └── Question.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── logo.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── logo.pdf
│ │ │ │ └── Info.plist
│ │ │ ├── Strategies
│ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── QuestionGroupCell.swift
│ │ │ └── QuestionView.swift
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 07-memento-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Caretakers
│ │ │ │ │ ├── DiskCaretaker.swift
│ │ │ │ │ └── QuestionGroupCaretaker.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ │ ├── QuestionViewController.swift
│ │ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── AppSettings.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ └── QuestionGroupData.json
│ │ │ │ ├── Strategies
│ │ │ │ │ ├── BaseQuestionStrategy.swift
│ │ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ ├── QuestionGroupCell.swift
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ ├── resources
│ │ │ └── QuestionGroupData.json
│ │ └── starter
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Observable.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Strategy_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── Controllers
│ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ ├── QuestionViewController.swift
│ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── AppSettings.swift
│ │ │ │ ├── QuestionGroupData.swift
│ │ │ │ ├── QuestionGroup.swift
│ │ │ │ └── Question.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── logo.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── logo.pdf
│ │ │ │ └── Info.plist
│ │ │ ├── Strategies
│ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── QuestionGroupCell.swift
│ │ │ └── QuestionView.swift
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 08-observer-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Caretakers
│ │ │ │ │ ├── DiskCaretaker.swift
│ │ │ │ │ └── QuestionGroupCaretaker.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ │ ├── QuestionViewController.swift
│ │ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── AppSettings.swift
│ │ │ │ │ ├── Observable.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ └── QuestionGroupData.json
│ │ │ │ ├── Strategies
│ │ │ │ │ ├── BaseQuestionStrategy.swift
│ │ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ ├── QuestionGroupCell.swift
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Observable.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Strategy_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── Caretakers
│ │ │ │ ├── DiskCaretaker.swift
│ │ │ │ └── QuestionGroupCaretaker.swift
│ │ │ ├── Controllers
│ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ ├── QuestionViewController.swift
│ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── AppSettings.swift
│ │ │ │ ├── QuestionGroup.swift
│ │ │ │ └── Question.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── logo.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── logo.pdf
│ │ │ │ ├── Info.plist
│ │ │ │ └── QuestionGroupData.json
│ │ │ ├── Strategies
│ │ │ │ ├── BaseQuestionStrategy.swift
│ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── QuestionGroupCell.swift
│ │ │ └── QuestionView.swift
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 09-builder-pattern
│ │ ├── final
│ │ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Observable.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Strategy_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RabbleWabble
│ │ │ ├── RabbleWabble
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Builders
│ │ │ │ │ └── QuestionGroupBuilder.swift
│ │ │ │ ├── Caretakers
│ │ │ │ │ ├── DiskCaretaker.swift
│ │ │ │ │ └── QuestionGroupCaretaker.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ │ ├── CreateQuestionGroupViewController.swift
│ │ │ │ │ ├── QuestionViewController.swift
│ │ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── AppSettings.swift
│ │ │ │ │ ├── Observable.swift
│ │ │ │ │ ├── QuestionGroup.swift
│ │ │ │ │ └── Question.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── logo.pdf
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ └── QuestionGroupData.json
│ │ │ │ ├── Strategies
│ │ │ │ │ ├── BaseQuestionStrategy.swift
│ │ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CreateQuestionCell.swift
│ │ │ │ ├── CreateQuestionGroupTitleCell.swift
│ │ │ │ ├── JapaneseTextField.swift
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ ├── NewQuestionGroup.storyboard
│ │ │ │ ├── QuestionGroupCell.swift
│ │ │ │ └── QuestionView.swift
│ │ │ └── RabbleWabble.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ ├── resources
│ │ │ ├── Controllers
│ │ │ │ └── CreateQuestionGroupViewController.swift
│ │ │ └── Views
│ │ │ ├── CreateQuestionCell.swift
│ │ │ ├── CreateQuestionGroupTitleCell.swift
│ │ │ ├── JapaneseTextField.swift
│ │ │ └── NewQuestionGroup.storyboard
│ │ └── starter
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Builder_Diagram.png
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Delegation_Diagram.png
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Memento_Diagram.png
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVC_Diagram.png
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Observer_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Observable.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Singleton_Diagram.png
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Strategy_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── Caretakers
│ │ │ │ ├── DiskCaretaker.swift
│ │ │ │ └── QuestionGroupCaretaker.swift
│ │ │ ├── Controllers
│ │ │ │ ├── AppSettingsViewController.swift
│ │ │ │ ├── CreateQuestionGroupViewController.swift
│ │ │ │ ├── QuestionViewController.swift
│ │ │ │ └── SelectQuestionGroupViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── AppSettings.swift
│ │ │ │ ├── Observable.swift
│ │ │ │ ├── QuestionGroup.swift
│ │ │ │ └── Question.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_plus.pdf
│ │ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_x.pdf
│ │ │ │ │ ├── ic_menu.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_menu.pdf
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── logo.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── logo.pdf
│ │ │ │ ├── Info.plist
│ │ │ │ └── QuestionGroupData.json
│ │ │ ├── Strategies
│ │ │ │ ├── BaseQuestionStrategy.swift
│ │ │ │ ├── QuestionStrategy.swift
│ │ │ │ ├── RandomQuestionStrategy.swift
│ │ │ │ └── SequentialQuestionStrategy.swift
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ ├── CreateQuestionCell.swift
│ │ │ ├── CreateQuestionGroupTitleCell.swift
│ │ │ ├── JapaneseTextField.swift
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── NewQuestionGroup.storyboard
│ │ │ ├── QuestionGroupCell.swift
│ │ │ └── QuestionView.swift
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 10-model-view-viewmodel-pattern
│ │ ├── final
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── CoffeeQuest
│ │ │ │ │ ├── AppDelegate
│ │ │ │ │ │ └── AppDelegate.swift
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ └── ViewController.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ │ └── terrible.png
│ │ │ │ │ │ └── Info.plist
│ │ │ │ │ ├── ViewModels
│ │ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ │ └── Views
│ │ │ │ │ └── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDETemplateMacros.plist
│ │ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ ├── Podfile
│ │ │ │ ├── Podfile.lock
│ │ │ │ └── Pods
│ │ │ │ ├── Manifest.lock
│ │ │ │ ├── Pods.xcodeproj
│ │ │ │ │ └── project.pbxproj
│ │ │ │ ├── Target Support Files
│ │ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ │ └── YelpAPI
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ │ └── YelpAPI.xcconfig
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Classes
│ │ │ │ │ ├── Client
│ │ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ │ ├── Common
│ │ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ │ ├── Request
│ │ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ │ └── YLPSortType.h
│ │ │ │ │ ├── Response
│ │ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ │ └── YLPUser.m
│ │ │ │ │ └── YelpAPI.h
│ │ │ │ ├── LICENSE
│ │ │ │ └── README.md
│ │ │ └── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ │ └── stuart.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ └── MapPin.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ └── terrible.png
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDETemplateMacros.plist
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ └── Pods
│ │ │ ├── Manifest.lock
│ │ │ ├── Pods.xcodeproj
│ │ │ │ └── project.pbxproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Info.plist
│ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ └── YelpAPI.xcconfig
│ │ │ └── YelpAPI
│ │ │ ├── Classes
│ │ │ │ ├── Client
│ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ ├── Common
│ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ ├── Request
│ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ └── YLPSortType.h
│ │ │ │ ├── Response
│ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ └── YLPUser.m
│ │ │ │ └── YelpAPI.h
│ │ │ ├── LICENSE
│ │ │ └── README.md
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ ├── contents.xcplayground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Adapter_Diagram.png
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Facade_Diagram.png
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Factory_Diagram.png
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Iterator_Diagram.png
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── Resources
│ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ └── Sources
│ │ │ │ └── MulticastDelegate.swift
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ └── stuart.png
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Prototype_Diagram.png
│ │ │ └── State.xcplaygroundpage
│ │ │ ├── Contents.swift
│ │ │ └── Resources
│ │ │ └── State_Diagram.png
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 11-factory-pattern
│ │ ├── final
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── CoffeeQuest
│ │ │ │ │ ├── AppDelegate
│ │ │ │ │ │ └── AppDelegate.swift
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ └── ViewController.swift
│ │ │ │ │ ├── Factories
│ │ │ │ │ │ └── AnnotationFactory.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ │ └── terrible.png
│ │ │ │ │ │ └── Info.plist
│ │ │ │ │ ├── ViewModels
│ │ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ │ └── Views
│ │ │ │ │ └── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDETemplateMacros.plist
│ │ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ ├── Podfile
│ │ │ │ ├── Podfile.lock
│ │ │ │ └── Pods
│ │ │ │ ├── Manifest.lock
│ │ │ │ ├── Pods.xcodeproj
│ │ │ │ │ └── project.pbxproj
│ │ │ │ ├── Target Support Files
│ │ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ │ └── YelpAPI
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ │ └── YelpAPI.xcconfig
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Classes
│ │ │ │ │ ├── Client
│ │ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ │ ├── Common
│ │ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ │ ├── Request
│ │ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ │ └── YLPSortType.h
│ │ │ │ │ ├── Response
│ │ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ │ └── YLPUser.m
│ │ │ │ │ └── YelpAPI.h
│ │ │ │ ├── LICENSE
│ │ │ │ └── README.md
│ │ │ └── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ │ └── stuart.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ └── terrible.png
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── ViewModels
│ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDETemplateMacros.plist
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ └── Pods
│ │ │ ├── Manifest.lock
│ │ │ ├── Pods.xcodeproj
│ │ │ │ └── project.pbxproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Info.plist
│ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ └── YelpAPI.xcconfig
│ │ │ └── YelpAPI
│ │ │ ├── Classes
│ │ │ │ ├── Client
│ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ ├── Common
│ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ ├── Request
│ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ └── YLPSortType.h
│ │ │ │ ├── Response
│ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ └── YLPUser.m
│ │ │ │ └── YelpAPI.h
│ │ │ ├── LICENSE
│ │ │ └── README.md
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ ├── contents.xcplayground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Adapter_Diagram.png
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Facade_Diagram.png
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Factory_Diagram.png
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Iterator_Diagram.png
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── Resources
│ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ └── Sources
│ │ │ │ └── MulticastDelegate.swift
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ └── stuart.png
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Prototype_Diagram.png
│ │ │ └── State.xcplaygroundpage
│ │ │ ├── Contents.swift
│ │ │ └── Resources
│ │ │ └── State_Diagram.png
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 12-adapter-pattern
│ │ ├── final
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── CoffeeQuest
│ │ │ │ │ ├── AppDelegate
│ │ │ │ │ │ └── AppDelegate.swift
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ └── ViewController.swift
│ │ │ │ │ ├── Factories
│ │ │ │ │ │ └── AnnotationFactory.swift
│ │ │ │ │ ├── Models
│ │ │ │ │ │ └── Protocols.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ │ └── terrible.png
│ │ │ │ │ │ └── Info.plist
│ │ │ │ │ ├── ViewModels
│ │ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ │ └── Views
│ │ │ │ │ └── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDETemplateMacros.plist
│ │ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ ├── Podfile
│ │ │ │ ├── Podfile.lock
│ │ │ │ └── Pods
│ │ │ │ ├── Manifest.lock
│ │ │ │ ├── Pods.xcodeproj
│ │ │ │ │ └── project.pbxproj
│ │ │ │ ├── Target Support Files
│ │ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ │ └── YelpAPI
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ │ └── YelpAPI.xcconfig
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Classes
│ │ │ │ │ ├── Client
│ │ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ │ ├── Common
│ │ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ │ ├── Request
│ │ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ │ └── YLPSortType.h
│ │ │ │ │ ├── Response
│ │ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ │ └── YLPUser.m
│ │ │ │ │ └── YelpAPI.h
│ │ │ │ ├── LICENSE
│ │ │ │ └── README.md
│ │ │ └── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ │ └── stuart.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Factories
│ │ │ │ │ └── AnnotationFactory.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ └── terrible.png
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── ViewModels
│ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDETemplateMacros.plist
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ └── Pods
│ │ │ ├── Manifest.lock
│ │ │ ├── Pods.xcodeproj
│ │ │ │ └── project.pbxproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Info.plist
│ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ └── YelpAPI.xcconfig
│ │ │ └── YelpAPI
│ │ │ ├── Classes
│ │ │ │ ├── Client
│ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ ├── Common
│ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ ├── Request
│ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ └── YLPSortType.h
│ │ │ │ ├── Response
│ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ └── YLPUser.m
│ │ │ │ └── YelpAPI.h
│ │ │ ├── LICENSE
│ │ │ └── README.md
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ ├── contents.xcplayground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Adapter_Diagram.png
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Facade_Diagram.png
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Factory_Diagram.png
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Iterator_Diagram.png
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── Resources
│ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ └── Sources
│ │ │ │ └── MulticastDelegate.swift
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ └── stuart.png
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Prototype_Diagram.png
│ │ │ └── State.xcplaygroundpage
│ │ │ ├── Contents.swift
│ │ │ └── Resources
│ │ │ └── State_Diagram.png
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 13-iterator-pattern
│ │ ├── final
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── CoffeeQuest
│ │ │ │ │ ├── AppDelegate
│ │ │ │ │ │ └── AppDelegate.swift
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ └── ViewController.swift
│ │ │ │ │ ├── Factories
│ │ │ │ │ │ └── AnnotationFactory.swift
│ │ │ │ │ ├── Models
│ │ │ │ │ │ ├── Filter.swift
│ │ │ │ │ │ └── Protocols.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ │ └── terrible.png
│ │ │ │ │ │ └── Info.plist
│ │ │ │ │ ├── ViewModels
│ │ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ │ └── Views
│ │ │ │ │ └── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDETemplateMacros.plist
│ │ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ ├── Podfile
│ │ │ │ ├── Podfile.lock
│ │ │ │ └── Pods
│ │ │ │ ├── Manifest.lock
│ │ │ │ ├── Pods.xcodeproj
│ │ │ │ │ └── project.pbxproj
│ │ │ │ ├── Target Support Files
│ │ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ │ └── YelpAPI
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ │ └── YelpAPI.xcconfig
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Classes
│ │ │ │ │ ├── Client
│ │ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ │ ├── Common
│ │ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ │ ├── Request
│ │ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ │ └── YLPSortType.h
│ │ │ │ │ ├── Response
│ │ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ │ └── YLPUser.m
│ │ │ │ │ └── YelpAPI.h
│ │ │ │ ├── LICENSE
│ │ │ │ └── README.md
│ │ │ └── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ │ └── stuart.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Factories
│ │ │ │ │ └── AnnotationFactory.swift
│ │ │ │ ├── Models
│ │ │ │ │ └── Protocols.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── bad.imageset
│ │ │ │ │ │ │ ├── bad@2x.png
│ │ │ │ │ │ │ ├── bad@3x.png
│ │ │ │ │ │ │ ├── bad.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── good.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── good@2x.png
│ │ │ │ │ │ │ ├── good@3x.png
│ │ │ │ │ │ │ └── good.png
│ │ │ │ │ │ ├── great.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── great@2x.png
│ │ │ │ │ │ │ ├── great@3x.png
│ │ │ │ │ │ │ └── great.png
│ │ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Launch@2x.png
│ │ │ │ │ │ │ ├── Launch@3x.png
│ │ │ │ │ │ │ └── Launch.png
│ │ │ │ │ │ ├── meh.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── meh@2x.png
│ │ │ │ │ │ │ ├── meh@3x.png
│ │ │ │ │ │ │ └── meh.png
│ │ │ │ │ │ └── terrible.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── terrible@2x.png
│ │ │ │ │ │ ├── terrible@3x.png
│ │ │ │ │ │ └── terrible.png
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── ViewModels
│ │ │ │ │ └── BusinessMapViewModel.swift
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDETemplateMacros.plist
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ └── Pods
│ │ │ ├── Manifest.lock
│ │ │ ├── Pods.xcodeproj
│ │ │ │ └── project.pbxproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.markdown
│ │ │ │ │ ├── Pods-CoffeeQuest-acknowledgements.plist
│ │ │ │ │ ├── Pods-CoffeeQuest.debug.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-dummy.m
│ │ │ │ │ ├── Pods-CoffeeQuest-frameworks.sh
│ │ │ │ │ ├── Pods-CoffeeQuest.modulemap
│ │ │ │ │ ├── Pods-CoffeeQuest.release.xcconfig
│ │ │ │ │ ├── Pods-CoffeeQuest-resources.sh
│ │ │ │ │ └── Pods-CoffeeQuest-umbrella.h
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Info.plist
│ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ └── YelpAPI.xcconfig
│ │ │ └── YelpAPI
│ │ │ ├── Classes
│ │ │ │ ├── Client
│ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ ├── Common
│ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ ├── Request
│ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ └── YLPSortType.h
│ │ │ │ ├── Response
│ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ └── YLPUser.m
│ │ │ │ └── YelpAPI.h
│ │ │ ├── LICENSE
│ │ │ └── README.md
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ ├── contents.xcplayground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Adapter_Diagram.png
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Facade_Diagram.png
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Factory_Diagram.png
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Iterator_Diagram.png
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── Resources
│ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ └── Sources
│ │ │ │ └── MulticastDelegate.swift
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ ├── MVVM_Diagram.png
│ │ │ │ └── stuart.png
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── Prototype_Diagram.png
│ │ │ └── State.xcplaygroundpage
│ │ │ ├── Contents.swift
│ │ │ └── Resources
│ │ │ └── State_Diagram.png
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 14-prototype-pattern
│ │ ├── final
│ │ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ │ └── State.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── State_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── MirrorPad
│ │ │ ├── MirrorPad
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Protocols
│ │ │ │ │ └── Copying.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ │ └── launch_background.png
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── DrawView.swift
│ │ │ │ └── LineShape.swift
│ │ │ └── MirrorPad.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ └── ViewController.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ └── launch_background.png
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── DrawView.swift
│ │ │ └── LineShape.swift
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 15-state-pattern
│ │ ├── final
│ │ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ │ └── State.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── State_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── MirrorPad
│ │ │ ├── MirrorPad
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Protocols
│ │ │ │ │ └── Copying.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ │ └── launch_background.png
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── DrawView
│ │ │ │ ├── DrawView.swift
│ │ │ │ ├── LineShape.swift
│ │ │ │ └── States
│ │ │ │ ├── AcceptInputState.swift
│ │ │ │ ├── AnimateState.swift
│ │ │ │ ├── ClearState.swift
│ │ │ │ ├── CopyState.swift
│ │ │ │ └── DrawViewState.swift
│ │ │ └── MirrorPad.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ └── ViewController.swift
│ │ │ ├── Protocols
│ │ │ │ └── Copying.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ └── launch_background.png
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── DrawView.swift
│ │ │ └── LineShape.swift
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 16-multicast-delegate-pattern
│ │ ├── final
│ │ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ │ └── State.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── State_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── MirrorPad
│ │ │ ├── MirrorPad
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Protocols
│ │ │ │ │ ├── Copying.swift
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ │ └── launch_background.png
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── DrawView
│ │ │ │ ├── DrawView.swift
│ │ │ │ ├── LineShape.swift
│ │ │ │ └── States
│ │ │ │ ├── AcceptInputState.swift
│ │ │ │ ├── AnimateState.swift
│ │ │ │ ├── ClearState.swift
│ │ │ │ ├── CopyState.swift
│ │ │ │ └── DrawViewState.swift
│ │ │ └── MirrorPad.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ └── ViewController.swift
│ │ │ ├── Protocols
│ │ │ │ └── Copying.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ └── launch_background.png
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ └── DrawView
│ │ │ ├── DrawView.swift
│ │ │ ├── LineShape.swift
│ │ │ └── States
│ │ │ ├── AcceptInputState.swift
│ │ │ ├── AnimateState.swift
│ │ │ ├── ClearState.swift
│ │ │ ├── CopyState.swift
│ │ │ └── DrawViewState.swift
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 17-facade-pattern
│ │ ├── final
│ │ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ │ └── State.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── State_Diagram.png
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── MirrorPad
│ │ │ ├── MirrorPad
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Facades
│ │ │ │ │ ├── DrawingSelectionViewController.swift
│ │ │ │ │ ├── ImageRenderer.swift
│ │ │ │ │ └── ShareFacade.swift
│ │ │ │ ├── Protocols
│ │ │ │ │ ├── Copying.swift
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ │ └── launch_background.png
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── DrawingSelectionViewController.xib
│ │ │ │ └── DrawView
│ │ │ │ ├── DrawView.swift
│ │ │ │ ├── LineShape.swift
│ │ │ │ └── States
│ │ │ │ ├── AcceptInputState.swift
│ │ │ │ ├── AnimateState.swift
│ │ │ │ ├── ClearState.swift
│ │ │ │ ├── CopyState.swift
│ │ │ │ └── DrawViewState.swift
│ │ │ └── MirrorPad.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ ├── resources
│ │ │ ├── DrawingSelectionViewController.swift
│ │ │ ├── DrawingSelectionViewController.xib
│ │ │ └── ImageRenderer.swift
│ │ └── starter
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Adapter_Diagram.png
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Facade_Diagram.png
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Factory_Diagram.png
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Iterator_Diagram.png
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── MulticastDelegate_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── MulticastDelegate.swift
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── MVVM_Diagram.png
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Prototype_Diagram.png
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ ├── Contents.swift
│ │ │ │ └── Resources
│ │ │ │ └── State_Diagram.png
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ └── ViewController.swift
│ │ │ ├── Protocols
│ │ │ │ ├── Copying.swift
│ │ │ │ └── MulticastDelegate.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── expand_arrows.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── expand_arrows.pdf
│ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── launch_background@2x.png
│ │ │ │ │ ├── launch_background@3x.png
│ │ │ │ │ └── launch_background.png
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ └── DrawView
│ │ │ ├── DrawView.swift
│ │ │ ├── LineShape.swift
│ │ │ └── States
│ │ │ ├── AcceptInputState.swift
│ │ │ ├── AnimateState.swift
│ │ │ ├── ClearState.swift
│ │ │ ├── CopyState.swift
│ │ │ └── DrawViewState.swift
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 18-flyweight-pattern
│ │ ├── final
│ │ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Command_Diagram.png
│ │ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ ├── Controllers
│ │ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ │ └── Routers
│ │ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ │ └── Router.swift
│ │ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Mediator.swift
│ │ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── YetiJokes
│ │ │ ├── YetiJokes
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── JokeProvider.swift
│ │ │ │ │ └── Joke.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── background.imageset
│ │ │ │ │ │ │ ├── background.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── cool_yeti.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── cool_yeti@2x.png
│ │ │ │ │ │ ├── cool_yeti@3x.png
│ │ │ │ │ │ └── cool_yeti.png
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ └── jokes.json
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── YetiJokes.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDETemplateMacros.plist
│ │ │ └── YetiTheme
│ │ │ ├── YetiTheme
│ │ │ │ ├── coolstory-regular.ttf
│ │ │ │ ├── Fonts.swift
│ │ │ │ ├── Info.plist
│ │ │ │ └── YetiTheme.h
│ │ │ └── YetiTheme.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Command_Diagram.png
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ └── Routers
│ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Mediator.swift
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── YetiJokes
│ │ ├── YetiJokes
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ └── ViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── JokeProvider.swift
│ │ │ │ └── Joke.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── background.imageset
│ │ │ │ │ │ ├── background.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── cool_yeti.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── cool_yeti@2x.png
│ │ │ │ │ ├── cool_yeti@3x.png
│ │ │ │ │ └── cool_yeti.png
│ │ │ │ ├── Info.plist
│ │ │ │ └── jokes.json
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── YetiJokes.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── YetiTheme
│ │ ├── YetiTheme
│ │ │ ├── coolstory-regular.ttf
│ │ │ ├── Fonts.swift
│ │ │ ├── Info.plist
│ │ │ └── YetiTheme.h
│ │ └── YetiTheme.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 19-mediator-pattern
│ │ ├── final
│ │ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Command_Diagram.png
│ │ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ ├── Controllers
│ │ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ │ └── Routers
│ │ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ │ └── Router.swift
│ │ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Mediator.swift
│ │ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── YetiDate
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ ├── Pods
│ │ │ │ ├── Manifest.lock
│ │ │ │ ├── Pods.xcodeproj
│ │ │ │ │ └── project.pbxproj
│ │ │ │ ├── Target Support Files
│ │ │ │ │ ├── Pods-YetiDate
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ ├── Pods-YetiDate-acknowledgements.markdown
│ │ │ │ │ │ ├── Pods-YetiDate-acknowledgements.plist
│ │ │ │ │ │ ├── Pods-YetiDate.debug.xcconfig
│ │ │ │ │ │ ├── Pods-YetiDate-dummy.m
│ │ │ │ │ │ ├── Pods-YetiDate-frameworks.sh
│ │ │ │ │ │ ├── Pods-YetiDate.modulemap
│ │ │ │ │ │ ├── Pods-YetiDate.release.xcconfig
│ │ │ │ │ │ ├── Pods-YetiDate-resources.sh
│ │ │ │ │ │ └── Pods-YetiDate-umbrella.h
│ │ │ │ │ └── YelpAPI
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ │ └── YelpAPI.xcconfig
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Classes
│ │ │ │ │ ├── Client
│ │ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ │ ├── Common
│ │ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ │ ├── Request
│ │ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ │ └── YLPSortType.h
│ │ │ │ │ ├── Response
│ │ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ │ └── YLPUser.m
│ │ │ │ │ └── YelpAPI.h
│ │ │ │ ├── LICENSE
│ │ │ │ └── README.md
│ │ │ ├── YetiDate
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── PlanDateViewController.swift
│ │ │ │ │ └── ReviewDateDetailsViewController.swift
│ │ │ │ ├── Extensions
│ │ │ │ │ ├── CLLocationCoordinate2D+Hashable.swift
│ │ │ │ │ └── YLPCoordinate+CLLocationCoordinate2D.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── APIKeys.swift
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── background_yeti_date.imageset
│ │ │ │ │ │ │ ├── background_yeti_date@2x.png
│ │ │ │ │ │ │ ├── background_yeti_date@3x.png
│ │ │ │ │ │ │ ├── background_yeti_date.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_bar.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── ic_bar@2x.png
│ │ │ │ │ │ │ ├── ic_bar@3x.png
│ │ │ │ │ │ │ └── ic_bar.png
│ │ │ │ │ │ ├── ic_bar_large.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── ic_bar_large@2x.png
│ │ │ │ │ │ │ ├── ic_bar_large@3x.png
│ │ │ │ │ │ │ └── ic_bar_large.png
│ │ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ │ ├── ic_food.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── ic_food@2x.png
│ │ │ │ │ │ │ ├── ic_food@3x.png
│ │ │ │ │ │ │ └── ic_food.png
│ │ │ │ │ │ ├── ic_food_large.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── ic_food_large@2x.png
│ │ │ │ │ │ │ ├── ic_food_large@3x.png
│ │ │ │ │ │ │ └── ic_food_large.png
│ │ │ │ │ │ ├── ic_movie.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── ic_movie@2x.png
│ │ │ │ │ │ │ ├── ic_movie@3x.png
│ │ │ │ │ │ │ └── ic_movie.png
│ │ │ │ │ │ └── ic_movie_large.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_movie_large@2x.png
│ │ │ │ │ │ ├── ic_movie_large@3x.png
│ │ │ │ │ │ └── ic_movie_large.png
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── SearchClient
│ │ │ │ │ ├── Mediator.swift
│ │ │ │ │ ├── Protocols
│ │ │ │ │ │ ├── SearchClientDelegate.swift
│ │ │ │ │ │ ├── SearchColleagueMediating.swift
│ │ │ │ │ │ └── SearchColleague.swift
│ │ │ │ │ ├── SearchClient.swift
│ │ │ │ │ └── YelpSearchColleague.swift
│ │ │ │ ├── Utils
│ │ │ │ │ └── ContestedAnnotationTool.swift
│ │ │ │ ├── ViewModels
│ │ │ │ │ ├── BusinessMapViewModel.swift
│ │ │ │ │ ├── BusinessTableViewModel.swift
│ │ │ │ │ └── YelpCategory.swift
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── BusinessTableViewCell.swift
│ │ │ ├── YetiDate.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ └── xcshareddata
│ │ │ │ ├── IDETemplateMacros.plist
│ │ │ │ └── xcschemes
│ │ │ │ └── YetiDate.xcscheme
│ │ │ └── YetiDate.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── starter
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Command_Diagram.png
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ └── Routers
│ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Mediator.swift
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── YetiDate
│ │ ├── Podfile
│ │ ├── Podfile.lock
│ │ ├── Pods
│ │ │ ├── Manifest.lock
│ │ │ ├── Pods.xcodeproj
│ │ │ │ └── project.pbxproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-YetiDate
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-YetiDate-acknowledgements.markdown
│ │ │ │ │ ├── Pods-YetiDate-acknowledgements.plist
│ │ │ │ │ ├── Pods-YetiDate.debug.xcconfig
│ │ │ │ │ ├── Pods-YetiDate-dummy.m
│ │ │ │ │ ├── Pods-YetiDate-frameworks.sh
│ │ │ │ │ ├── Pods-YetiDate.modulemap
│ │ │ │ │ ├── Pods-YetiDate.release.xcconfig
│ │ │ │ │ ├── Pods-YetiDate-resources.sh
│ │ │ │ │ └── Pods-YetiDate-umbrella.h
│ │ │ │ └── YelpAPI
│ │ │ │ ├── Info.plist
│ │ │ │ ├── YelpAPI-dummy.m
│ │ │ │ ├── YelpAPI.modulemap
│ │ │ │ ├── YelpAPI-prefix.pch
│ │ │ │ ├── YelpAPI-umbrella.h
│ │ │ │ └── YelpAPI.xcconfig
│ │ │ └── YelpAPI
│ │ │ ├── Classes
│ │ │ │ ├── Client
│ │ │ │ │ ├── YLPClient+Business.h
│ │ │ │ │ ├── YLPClient+Business.m
│ │ │ │ │ ├── YLPClient.h
│ │ │ │ │ ├── YLPClient.m
│ │ │ │ │ ├── YLPClient+PhoneSearch.h
│ │ │ │ │ ├── YLPClient+PhoneSearch.m
│ │ │ │ │ ├── YLPClientPrivate.h
│ │ │ │ │ ├── YLPClient+Reviews.h
│ │ │ │ │ ├── YLPClient+Reviews.m
│ │ │ │ │ ├── YLPClient+Search.h
│ │ │ │ │ └── YLPClient+Search.m
│ │ │ │ ├── Common
│ │ │ │ │ ├── YLPCoordinate.h
│ │ │ │ │ └── YLPCoordinate.m
│ │ │ │ ├── Request
│ │ │ │ │ ├── YLPQuery.h
│ │ │ │ │ ├── YLPQuery.m
│ │ │ │ │ ├── YLPQueryPrivate.h
│ │ │ │ │ └── YLPSortType.h
│ │ │ │ ├── Response
│ │ │ │ │ ├── NSDictionary+YLPUtils.m
│ │ │ │ │ ├── YLPBusiness.h
│ │ │ │ │ ├── YLPBusiness.m
│ │ │ │ │ ├── YLPBusinessReviews.h
│ │ │ │ │ ├── YLPBusinessReviews.m
│ │ │ │ │ ├── YLPCategory.h
│ │ │ │ │ ├── YLPCategory.m
│ │ │ │ │ ├── YLPLocation.h
│ │ │ │ │ ├── YLPLocation.m
│ │ │ │ │ ├── YLPResponsePrivate.h
│ │ │ │ │ ├── YLPReview.h
│ │ │ │ │ ├── YLPReview.m
│ │ │ │ │ ├── YLPSearch.h
│ │ │ │ │ ├── YLPSearch.m
│ │ │ │ │ ├── YLPUser.h
│ │ │ │ │ └── YLPUser.m
│ │ │ │ └── YelpAPI.h
│ │ │ ├── LICENSE
│ │ │ └── README.md
│ │ ├── YetiDate
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ ├── PlanDateViewController.swift
│ │ │ │ └── ReviewDateDetailsViewController.swift
│ │ │ ├── Extensions
│ │ │ │ ├── CLLocationCoordinate2D+Hashable.swift
│ │ │ │ └── YLPCoordinate+CLLocationCoordinate2D.swift
│ │ │ ├── Resources
│ │ │ │ ├── APIKeys.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── background_yeti_date.imageset
│ │ │ │ │ │ ├── background_yeti_date@2x.png
│ │ │ │ │ │ ├── background_yeti_date@3x.png
│ │ │ │ │ │ ├── background_yeti_date.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_bar.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_bar@2x.png
│ │ │ │ │ │ ├── ic_bar@3x.png
│ │ │ │ │ │ └── ic_bar.png
│ │ │ │ │ ├── ic_bar_large.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_bar_large@2x.png
│ │ │ │ │ │ ├── ic_bar_large@3x.png
│ │ │ │ │ │ └── ic_bar_large.png
│ │ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_circle_check.pdf
│ │ │ │ │ ├── ic_food.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_food@2x.png
│ │ │ │ │ │ ├── ic_food@3x.png
│ │ │ │ │ │ └── ic_food.png
│ │ │ │ │ ├── ic_food_large.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_food_large@2x.png
│ │ │ │ │ │ ├── ic_food_large@3x.png
│ │ │ │ │ │ └── ic_food_large.png
│ │ │ │ │ ├── ic_movie.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_movie@2x.png
│ │ │ │ │ │ ├── ic_movie@3x.png
│ │ │ │ │ │ └── ic_movie.png
│ │ │ │ │ └── ic_movie_large.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_movie_large@2x.png
│ │ │ │ │ ├── ic_movie_large@3x.png
│ │ │ │ │ └── ic_movie_large.png
│ │ │ │ └── Info.plist
│ │ │ ├── SearchClient
│ │ │ │ ├── Mediator.swift
│ │ │ │ ├── Protocols
│ │ │ │ │ ├── SearchClientDelegate.swift
│ │ │ │ │ ├── SearchColleagueMediating.swift
│ │ │ │ │ └── SearchColleague.swift
│ │ │ │ ├── SearchClient.swift
│ │ │ │ └── YelpSearchColleague.swift
│ │ │ ├── Utils
│ │ │ │ └── ContestedAnnotationTool.swift
│ │ │ ├── ViewModels
│ │ │ │ ├── BusinessMapViewModel.swift
│ │ │ │ ├── BusinessTableViewModel.swift
│ │ │ │ └── YelpCategory.swift
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ └── BusinessTableViewCell.swift
│ │ ├── YetiDate.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ ├── IDETemplateMacros.plist
│ │ │ └── xcschemes
│ │ │ └── YetiDate.xcscheme
│ │ └── YetiDate.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── 20-composite-pattern
│ │ ├── final
│ │ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Command_Diagram.png
│ │ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ ├── Controllers
│ │ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ │ └── Routers
│ │ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ │ └── Router.swift
│ │ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Mediator.swift
│ │ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── DefeatYourToDoList
│ │ │ ├── DefeatYourToDoList
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ └── ViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ └── Models.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── door.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── door.png
│ │ │ │ │ │ ├── helmet.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── object-tool-helmet.png
│ │ │ │ │ │ ├── NinjaCat.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── NinjaCat_icon1_1024.png
│ │ │ │ │ │ └── treasure.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── object-treasure.png
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── ToDoCell.swift
│ │ │ │ └── ToDoCell.xib
│ │ │ └── DefeatYourToDoList.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Command_Diagram.png
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ └── Routers
│ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Mediator.swift
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── DefeatYourToDoList
│ │ ├── DefeatYourToDoList
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ └── ViewController.swift
│ │ │ ├── Models
│ │ │ │ └── Models.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── door.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── door.png
│ │ │ │ │ ├── helmet.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── object-tool-helmet.png
│ │ │ │ │ ├── NinjaCat.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── NinjaCat_icon1_1024.png
│ │ │ │ │ └── treasure.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── object-treasure.png
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── ToDoCell.swift
│ │ │ └── ToDoCell.xib
│ │ └── DefeatYourToDoList.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 21-command-pattern
│ │ ├── final
│ │ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Command_Diagram.png
│ │ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ ├── Controllers
│ │ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ │ └── Routers
│ │ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ │ └── Router.swift
│ │ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Mediator.swift
│ │ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RayWenToe
│ │ │ ├── RayWenToe
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── GameManager
│ │ │ │ │ │ ├── GameManager.swift
│ │ │ │ │ │ ├── GameplayStrategy.temp_caseinsensitive_rename.swift
│ │ │ │ │ │ ├── MoveCommand.swift
│ │ │ │ │ │ ├── Referee.swift
│ │ │ │ │ │ └── States
│ │ │ │ │ │ ├── ComputerInputState.swift
│ │ │ │ │ │ ├── GameState.swift
│ │ │ │ │ │ ├── PlayerInputState.swift
│ │ │ │ │ │ └── PlayGameState.swift
│ │ │ │ │ ├── GameplayViewController.swift
│ │ │ │ │ └── SettingsViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── GameboardPosition.swift
│ │ │ │ │ ├── GameboardSize.swift
│ │ │ │ │ ├── Gameboard.swift
│ │ │ │ │ └── Player.swift
│ │ │ │ ├── Protocols
│ │ │ │ │ └── Copying.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── launch_background.pdf
│ │ │ │ │ └── Info.plist
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── GameboardView.swift
│ │ │ │ ├── GameplayView.swift
│ │ │ │ └── MarkViews
│ │ │ │ ├── MarkView.swift
│ │ │ │ ├── OView.swift
│ │ │ │ └── XView.swift
│ │ │ ├── RayWenToeTests
│ │ │ │ ├── Info.plist
│ │ │ │ └── RefereeTests.swift
│ │ │ └── RayWenToe.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Command_Diagram.png
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ └── Routers
│ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Mediator.swift
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RayWenToe
│ │ ├── RayWenToe
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ ├── GameManager
│ │ │ │ │ ├── GameManager.swift
│ │ │ │ │ ├── GameplayStrategy.temp_caseinsensitive_rename.swift
│ │ │ │ │ ├── Referee.swift
│ │ │ │ │ └── States
│ │ │ │ │ ├── ComputerInputState.swift
│ │ │ │ │ ├── GameState.swift
│ │ │ │ │ ├── PlayerInputState.swift
│ │ │ │ │ └── PlayGameState.swift
│ │ │ │ ├── GameplayViewController.swift
│ │ │ │ └── SettingsViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── GameboardPosition.swift
│ │ │ │ ├── GameboardSize.swift
│ │ │ │ ├── Gameboard.swift
│ │ │ │ └── Player.swift
│ │ │ ├── Protocols
│ │ │ │ └── Copying.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── ic_settings.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── ic_settings.pdf
│ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── launch_background.pdf
│ │ │ │ └── Info.plist
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameboardView.swift
│ │ │ ├── GameplayView.swift
│ │ │ └── MarkViews
│ │ │ ├── MarkView.swift
│ │ │ ├── OView.swift
│ │ │ └── XView.swift
│ │ ├── RayWenToeTests
│ │ │ ├── Info.plist
│ │ │ └── RefereeTests.swift
│ │ └── RayWenToe.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── 22-chain-of-responsibility
│ │ ├── final
│ │ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Command_Diagram.png
│ │ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ ├── Controllers
│ │ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ │ └── Routers
│ │ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ │ └── Router.swift
│ │ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Mediator.swift
│ │ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RWSecret
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ ├── Pods
│ │ │ │ ├── Manifest.lock
│ │ │ │ ├── Pods.xcodeproj
│ │ │ │ │ └── project.pbxproj
│ │ │ │ ├── RNCryptor
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Cryptor
│ │ │ │ │ │ └── include
│ │ │ │ │ │ └── RNCryptor.h
│ │ │ │ │ └── RNCryptor
│ │ │ │ │ └── RNCryptor.swift
│ │ │ │ ├── SwiftKeychainWrapper
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── SwiftKeychainWrapper
│ │ │ │ │ ├── KeychainItemAccessibility.swift
│ │ │ │ │ ├── KeychainWrapper.swift
│ │ │ │ │ └── SwiftKeychainWrapper.h
│ │ │ │ └── Target Support Files
│ │ │ │ ├── Pods-RWSecret
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-RWSecret-acknowledgements.markdown
│ │ │ │ │ ├── Pods-RWSecret-acknowledgements.plist
│ │ │ │ │ ├── Pods-RWSecret.debug.xcconfig
│ │ │ │ │ ├── Pods-RWSecret-dummy.m
│ │ │ │ │ ├── Pods-RWSecret-frameworks.sh
│ │ │ │ │ ├── Pods-RWSecret.modulemap
│ │ │ │ │ ├── Pods-RWSecret.release.xcconfig
│ │ │ │ │ ├── Pods-RWSecret-resources.sh
│ │ │ │ │ └── Pods-RWSecret-umbrella.h
│ │ │ │ ├── Pods-RWSecret-RWSecretTests
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests-acknowledgements.markdown
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests-acknowledgements.plist
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests.debug.xcconfig
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests-dummy.m
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests-frameworks.sh
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests.modulemap
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests.release.xcconfig
│ │ │ │ │ ├── Pods-RWSecret-RWSecretTests-resources.sh
│ │ │ │ │ └── Pods-RWSecret-RWSecretTests-umbrella.h
│ │ │ │ ├── RNCryptor
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── RNCryptor-dummy.m
│ │ │ │ │ ├── RNCryptor.modulemap
│ │ │ │ │ ├── RNCryptor-prefix.pch
│ │ │ │ │ ├── RNCryptor-umbrella.h
│ │ │ │ │ └── RNCryptor.xcconfig
│ │ │ │ └── SwiftKeychainWrapper
│ │ │ │ ├── Info.plist
│ │ │ │ ├── SwiftKeychainWrapper-dummy.m
│ │ │ │ ├── SwiftKeychainWrapper.modulemap
│ │ │ │ ├── SwiftKeychainWrapper-prefix.pch
│ │ │ │ ├── SwiftKeychainWrapper-umbrella.h
│ │ │ │ └── SwiftKeychainWrapper.xcconfig
│ │ │ ├── RWSecret
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── DecryptViewController.swift
│ │ │ │ │ └── PasswordViewController.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── SecretMessageCareTaker.swift
│ │ │ │ │ └── SecretMessage.swift
│ │ │ │ ├── PasswordClient
│ │ │ │ │ ├── DecryptionHandlerProtocol.swift
│ │ │ │ │ ├── DecryptionHandler.swift
│ │ │ │ │ ├── EncryptHandlerProtocol.swift
│ │ │ │ │ └── PasswordClient.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── launch_background.pdf
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ └── SecretMessages.json
│ │ │ │ └── Views
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ └── SecretMessageCell.swift
│ │ │ ├── RWSecretTests
│ │ │ │ ├── Cases
│ │ │ │ │ └── PasswordManagerTests.swift
│ │ │ │ └── Supporting Files
│ │ │ │ └── Info.plist
│ │ │ ├── RWSecret.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDETemplateMacros.plist
│ │ │ └── RWSecret.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── starter
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Command_Diagram.png
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ └── Routers
│ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Mediator.swift
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RWSecret
│ │ ├── Podfile
│ │ ├── Podfile.lock
│ │ ├── Pods
│ │ │ ├── Manifest.lock
│ │ │ ├── Pods.xcodeproj
│ │ │ │ └── project.pbxproj
│ │ │ ├── RNCryptor
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ └── Sources
│ │ │ │ ├── Cryptor
│ │ │ │ │ └── include
│ │ │ │ │ └── RNCryptor.h
│ │ │ │ └── RNCryptor
│ │ │ │ └── RNCryptor.swift
│ │ │ ├── SwiftKeychainWrapper
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ └── SwiftKeychainWrapper
│ │ │ │ ├── KeychainItemAccessibility.swift
│ │ │ │ ├── KeychainWrapper.swift
│ │ │ │ └── SwiftKeychainWrapper.h
│ │ │ └── Target Support Files
│ │ │ ├── Pods-RWSecret
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Pods-RWSecret-acknowledgements.markdown
│ │ │ │ ├── Pods-RWSecret-acknowledgements.plist
│ │ │ │ ├── Pods-RWSecret.debug.xcconfig
│ │ │ │ ├── Pods-RWSecret-dummy.m
│ │ │ │ ├── Pods-RWSecret-frameworks.sh
│ │ │ │ ├── Pods-RWSecret.modulemap
│ │ │ │ ├── Pods-RWSecret.release.xcconfig
│ │ │ │ ├── Pods-RWSecret-resources.sh
│ │ │ │ └── Pods-RWSecret-umbrella.h
│ │ │ ├── Pods-RWSecret-RWSecretTests
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Pods-RWSecret-RWSecretTests-acknowledgements.markdown
│ │ │ │ ├── Pods-RWSecret-RWSecretTests-acknowledgements.plist
│ │ │ │ ├── Pods-RWSecret-RWSecretTests.debug.xcconfig
│ │ │ │ ├── Pods-RWSecret-RWSecretTests-dummy.m
│ │ │ │ ├── Pods-RWSecret-RWSecretTests-frameworks.sh
│ │ │ │ ├── Pods-RWSecret-RWSecretTests.modulemap
│ │ │ │ ├── Pods-RWSecret-RWSecretTests.release.xcconfig
│ │ │ │ ├── Pods-RWSecret-RWSecretTests-resources.sh
│ │ │ │ └── Pods-RWSecret-RWSecretTests-umbrella.h
│ │ │ ├── RNCryptor
│ │ │ │ ├── Info.plist
│ │ │ │ ├── RNCryptor-dummy.m
│ │ │ │ ├── RNCryptor.modulemap
│ │ │ │ ├── RNCryptor-prefix.pch
│ │ │ │ ├── RNCryptor-umbrella.h
│ │ │ │ └── RNCryptor.xcconfig
│ │ │ └── SwiftKeychainWrapper
│ │ │ ├── Info.plist
│ │ │ ├── SwiftKeychainWrapper-dummy.m
│ │ │ ├── SwiftKeychainWrapper.modulemap
│ │ │ ├── SwiftKeychainWrapper-prefix.pch
│ │ │ ├── SwiftKeychainWrapper-umbrella.h
│ │ │ └── SwiftKeychainWrapper.xcconfig
│ │ ├── RWSecret
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Controllers
│ │ │ │ ├── DecryptViewController.swift
│ │ │ │ └── PasswordViewController.swift
│ │ │ ├── Models
│ │ │ │ ├── SecretMessageCareTaker.swift
│ │ │ │ └── SecretMessage.swift
│ │ │ ├── PasswordClient
│ │ │ │ ├── EncryptHandlerProtocol.swift
│ │ │ │ └── PasswordClient.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── launch_background.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── launch_background.pdf
│ │ │ │ ├── Info.plist
│ │ │ │ └── SecretMessages.json
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ └── SecretMessageCell.swift
│ │ ├── RWSecretTests
│ │ │ ├── Cases
│ │ │ │ └── PasswordManagerTests.swift
│ │ │ └── Supporting Files
│ │ │ └── Info.plist
│ │ ├── RWSecret.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── RWSecret.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── 23-coordinator-pattern
│ │ ├── final
│ │ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ │ ├── contents.xcplayground
│ │ │ │ │ └── Pages
│ │ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Command_Diagram.png
│ │ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ ├── Controllers
│ │ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ │ └── Routers
│ │ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ │ └── Router.swift
│ │ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ └── Resources
│ │ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ │ ├── Contents.swift
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ │ └── Sources
│ │ │ │ │ │ └── Mediator.swift
│ │ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ │ └── Contents.swift
│ │ │ │ │ └── Proxy.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── RayPets
│ │ │ ├── RayPets
│ │ │ │ ├── AppDelegate
│ │ │ │ │ └── AppDelegate.swift
│ │ │ │ ├── Coordinators
│ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ ├── HomeCoordinator.swift
│ │ │ │ │ └── PetAppointmentBuilderCoordinator.swift
│ │ │ │ ├── Models
│ │ │ │ │ ├── PainLevel.swift
│ │ │ │ │ ├── PetAppointment.swift
│ │ │ │ │ └── VisitType.swift
│ │ │ │ ├── Resources
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── faking_it.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── faking_it@2x.png
│ │ │ │ │ │ │ ├── faking_it@3x.png
│ │ │ │ │ │ │ └── faking_it.png
│ │ │ │ │ │ ├── logo.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── logo@2x.png
│ │ │ │ │ │ │ ├── logo@3x.png
│ │ │ │ │ │ │ └── logo.png
│ │ │ │ │ │ ├── no_appointment_owl.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── no_appointment_owl@2x.png
│ │ │ │ │ │ │ ├── no_appointment_owl@3x.png
│ │ │ │ │ │ │ └── no_appointment_owl.png
│ │ │ │ │ │ ├── pain_level_little.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── pain_level_little@2x.png
│ │ │ │ │ │ │ ├── pain_level_little@3x.png
│ │ │ │ │ │ │ └── pain_level_little.png
│ │ │ │ │ │ ├── pain_level_moderate.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── pain_level_moderate@2x.png
│ │ │ │ │ │ │ ├── pain_level_moderate@3x.png
│ │ │ │ │ │ │ └── pain_level_moderate.png
│ │ │ │ │ │ ├── pain_level_none.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── pain_level_none@2x.png
│ │ │ │ │ │ │ ├── pain_level_none@3x.png
│ │ │ │ │ │ │ └── pain_level_none.png
│ │ │ │ │ │ ├── pain_level_severe.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── pain_level_severe@2x.png
│ │ │ │ │ │ │ ├── pain_level_severe@3x.png
│ │ │ │ │ │ │ └── pain_level_severe.png
│ │ │ │ │ │ ├── pain_level_worst_possible.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── pain_level_worst_possible@2x.png
│ │ │ │ │ │ │ ├── pain_level_worst_possible@3x.png
│ │ │ │ │ │ │ └── pain_level_worst_possible.png
│ │ │ │ │ │ ├── visit_type_sick.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── visit_type_sick@2x.png
│ │ │ │ │ │ │ ├── visit_type_sick@3x.png
│ │ │ │ │ │ │ └── visit_type_sick.png
│ │ │ │ │ │ └── visit_type_well.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── visit_type_well@2x.png
│ │ │ │ │ │ ├── visit_type_well@3x.png
│ │ │ │ │ │ └── visit_type_well.png
│ │ │ │ │ └── Info.plist
│ │ │ │ ├── Routers
│ │ │ │ │ ├── AppDelegateRouter.swift
│ │ │ │ │ ├── ModalNavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ └── Screens
│ │ │ │ ├── FakingIt
│ │ │ │ │ ├── FakingIt.storyboard
│ │ │ │ │ └── FakingItViewController.swift
│ │ │ │ ├── Home
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ └── HomeViewController.swift
│ │ │ │ │ └── Views
│ │ │ │ │ ├── Home.storyboard
│ │ │ │ │ └── LaunchScreen.storyboard
│ │ │ │ ├── NoAppointmentRequired
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ └── NoAppointmentRequiredViewController.swift
│ │ │ │ │ └── Views
│ │ │ │ │ └── NoAppointmentRequired.storyboard
│ │ │ │ ├── PainLevel
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── PainLevelViewController.swift
│ │ │ │ │ │ └── SelectPainLevelViewController.swift
│ │ │ │ │ └── Views
│ │ │ │ │ └── SelectPainLevel.storyboard
│ │ │ │ ├── Protocols
│ │ │ │ │ └── StoryboardInstantiable.swift
│ │ │ │ └── VisitType
│ │ │ │ ├── Controllers
│ │ │ │ │ └── SelectVisitTypeViewController.swift
│ │ │ │ └── Views
│ │ │ │ └── SelectVisitType.storyboard
│ │ │ └── RayPets.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ └── IDETemplateMacros.plist
│ │ └── starter
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ ├── contents.xcplayground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── ChainOfResponsibility_Diagram.png
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Command_Diagram.png
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Composite_Diagram.png
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Coordinator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ │ ├── HomeViewController.swift
│ │ │ │ │ │ ├── StartOverViewController.swift
│ │ │ │ │ │ └── StepViewController.swift
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ │ ├── Coordinator.swift
│ │ │ │ │ │ └── HowToCodeCoordinator.swift
│ │ │ │ │ └── Routers
│ │ │ │ │ ├── NavigationRouter.swift
│ │ │ │ │ └── Router.swift
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ └── Flyweight_Diagram.png
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Contents.swift
│ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Mediator_Diagram.png
│ │ │ │ │ └── Sources
│ │ │ │ │ └── Mediator.swift
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ │ └── Contents.swift
│ │ │ │ └── Proxy.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RayPets
│ │ ├── RayPets
│ │ │ ├── AppDelegate
│ │ │ │ └── AppDelegate.swift
│ │ │ ├── Coordinators
│ │ │ │ └── Coordinator.swift
│ │ │ ├── Models
│ │ │ │ ├── PainLevel.swift
│ │ │ │ ├── PetAppointment.swift
│ │ │ │ └── VisitType.swift
│ │ │ ├── Resources
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ │ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ │ │ │ └── ItunesArtwork@2x.png
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── faking_it.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── faking_it@2x.png
│ │ │ │ │ │ ├── faking_it@3x.png
│ │ │ │ │ │ └── faking_it.png
│ │ │ │ │ ├── logo.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── logo@2x.png
│ │ │ │ │ │ ├── logo@3x.png
│ │ │ │ │ │ └── logo.png
│ │ │ │ │ ├── no_appointment_owl.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── no_appointment_owl@2x.png
│ │ │ │ │ │ ├── no_appointment_owl@3x.png
│ │ │ │ │ │ └── no_appointment_owl.png
│ │ │ │ │ ├── pain_level_little.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── pain_level_little@2x.png
│ │ │ │ │ │ ├── pain_level_little@3x.png
│ │ │ │ │ │ └── pain_level_little.png
│ │ │ │ │ ├── pain_level_moderate.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── pain_level_moderate@2x.png
│ │ │ │ │ │ ├── pain_level_moderate@3x.png
│ │ │ │ │ │ └── pain_level_moderate.png
│ │ │ │ │ ├── pain_level_none.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── pain_level_none@2x.png
│ │ │ │ │ │ ├── pain_level_none@3x.png
│ │ │ │ │ │ └── pain_level_none.png
│ │ │ │ │ ├── pain_level_severe.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── pain_level_severe@2x.png
│ │ │ │ │ │ ├── pain_level_severe@3x.png
│ │ │ │ │ │ └── pain_level_severe.png
│ │ │ │ │ ├── pain_level_worst_possible.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── pain_level_worst_possible@2x.png
│ │ │ │ │ │ ├── pain_level_worst_possible@3x.png
│ │ │ │ │ │ └── pain_level_worst_possible.png
│ │ │ │ │ ├── visit_type_sick.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── visit_type_sick@2x.png
│ │ │ │ │ │ ├── visit_type_sick@3x.png
│ │ │ │ │ │ └── visit_type_sick.png
│ │ │ │ │ └── visit_type_well.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── visit_type_well@2x.png
│ │ │ │ │ ├── visit_type_well@3x.png
│ │ │ │ │ └── visit_type_well.png
│ │ │ │ └── Info.plist
│ │ │ ├── Routers
│ │ │ │ └── Router.swift
│ │ │ └── Screens
│ │ │ ├── FakingIt
│ │ │ │ ├── FakingIt.storyboard
│ │ │ │ └── FakingItViewController.swift
│ │ │ ├── Home
│ │ │ │ ├── Controllers
│ │ │ │ │ └── HomeViewController.swift
│ │ │ │ └── Views
│ │ │ │ ├── Home.storyboard
│ │ │ │ └── LaunchScreen.storyboard
│ │ │ ├── NoAppointmentRequired
│ │ │ │ ├── Controllers
│ │ │ │ │ └── NoAppointmentRequiredViewController.swift
│ │ │ │ └── Views
│ │ │ │ └── NoAppointmentRequired.storyboard
│ │ │ ├── PainLevel
│ │ │ │ ├── Controllers
│ │ │ │ │ ├── PainLevelViewController.swift
│ │ │ │ │ └── SelectPainLevelViewController.swift
│ │ │ │ └── Views
│ │ │ │ └── SelectPainLevel.storyboard
│ │ │ ├── Protocols
│ │ │ │ └── StoryboardInstantiable.swift
│ │ │ └── VisitType
│ │ │ ├── Controllers
│ │ │ │ └── SelectVisitTypeViewController.swift
│ │ │ └── Views
│ │ │ └── SelectVisitType.storyboard
│ │ └── RayPets.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ └── IDETemplateMacros.plist
│ ├── Design_Patterns_by_Tutorials_v2.0.epub
│ └── Design_Patterns_by_Tutorials_v2.0.pdf
└── __MACOSX
└── Design Patterns by Tutorials v2.0
├── 03-model-view-controller-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ ├── resources
│ │ └── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ ├── ic_circle_check.imageset
│ │ ├── ic_circle_plus.imageset
│ │ ├── ic_circle_x.imageset
│ │ ├── ic_menu.imageset
│ │ ├── ic_settings.imageset
│ │ └── logo.imageset
│ └── starter
│ └── FundamentalDesignPatterns.xcworkspace
│ ├── FundamentalDesignPatterns.playground
│ │ └── Pages
│ │ ├── Builder.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Delegation.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Memento.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Observer.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ ├── Overview.xcplaygroundpage
│ │ ├── Singleton.xcplaygroundpage
│ │ │ └── Resources
│ │ └── Strategy.xcplaygroundpage
│ │ └── Resources
│ └── xcshareddata
├── 04-delegation-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── FundamentalDesignPatterns.xcworkspace
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── RabbleWabble
│ ├── RabbleWabble
│ │ ├── AppDelegate
│ │ ├── Base.lproj
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_circle_plus.imageset
│ │ │ ├── ic_circle_x.imageset
│ │ │ ├── ic_menu.imageset
│ │ │ ├── ic_settings.imageset
│ │ │ └── logo.imageset
│ │ └── Views
│ │ └── Base.lproj
│ └── RabbleWabble.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 05-strategy-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ ├── Strategies
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── FundamentalDesignPatterns.xcworkspace
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── RabbleWabble
│ ├── RabbleWabble
│ │ ├── AppDelegate
│ │ ├── Base.lproj
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_circle_plus.imageset
│ │ │ ├── ic_circle_x.imageset
│ │ │ ├── ic_menu.imageset
│ │ │ ├── ic_settings.imageset
│ │ │ └── logo.imageset
│ │ └── Views
│ │ └── Base.lproj
│ └── RabbleWabble.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 06-singleton-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ ├── Strategies
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── FundamentalDesignPatterns.xcworkspace
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── RabbleWabble
│ ├── RabbleWabble
│ │ ├── AppDelegate
│ │ ├── Base.lproj
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_circle_plus.imageset
│ │ │ ├── ic_circle_x.imageset
│ │ │ ├── ic_menu.imageset
│ │ │ ├── ic_settings.imageset
│ │ │ └── logo.imageset
│ │ ├── Strategies
│ │ └── Views
│ │ └── Base.lproj
│ └── RabbleWabble.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 07-memento-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Caretakers
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ ├── Strategies
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ ├── resources
│ └── starter
│ ├── FundamentalDesignPatterns.xcworkspace
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── RabbleWabble
│ ├── RabbleWabble
│ │ ├── AppDelegate
│ │ ├── Base.lproj
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_circle_plus.imageset
│ │ │ ├── ic_circle_x.imageset
│ │ │ ├── ic_menu.imageset
│ │ │ ├── ic_settings.imageset
│ │ │ └── logo.imageset
│ │ ├── Strategies
│ │ └── Views
│ │ └── Base.lproj
│ └── RabbleWabble.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 08-observer-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Caretakers
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ ├── Strategies
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── FundamentalDesignPatterns.xcworkspace
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── RabbleWabble
│ ├── RabbleWabble
│ │ ├── AppDelegate
│ │ ├── Base.lproj
│ │ ├── Caretakers
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_circle_plus.imageset
│ │ │ ├── ic_circle_x.imageset
│ │ │ ├── ic_menu.imageset
│ │ │ ├── ic_settings.imageset
│ │ │ └── logo.imageset
│ │ ├── Strategies
│ │ └── Views
│ │ └── Base.lproj
│ └── RabbleWabble.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 09-builder-pattern
│ ├── final
│ │ ├── FundamentalDesignPatterns.xcworkspace
│ │ │ ├── FundamentalDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── Strategy.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── RabbleWabble
│ │ ├── RabbleWabble
│ │ │ ├── AppDelegate
│ │ │ ├── Base.lproj
│ │ │ ├── Builders
│ │ │ ├── Caretakers
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_circle_plus.imageset
│ │ │ │ ├── ic_circle_x.imageset
│ │ │ │ ├── ic_menu.imageset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── logo.imageset
│ │ │ ├── Strategies
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── RabbleWabble.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ ├── resources
│ │ ├── Controllers
│ │ └── Views
│ └── starter
│ ├── FundamentalDesignPatterns.xcworkspace
│ │ ├── FundamentalDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Builder.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Delegation.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Memento.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Model-View-Controller.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Observer.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Singleton.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── Strategy.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── RabbleWabble
│ ├── RabbleWabble
│ │ ├── AppDelegate
│ │ ├── Base.lproj
│ │ ├── Caretakers
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_circle_plus.imageset
│ │ │ ├── ic_circle_x.imageset
│ │ │ ├── ic_menu.imageset
│ │ │ ├── ic_settings.imageset
│ │ │ └── logo.imageset
│ │ ├── Strategies
│ │ └── Views
│ │ └── Base.lproj
│ └── RabbleWabble.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 10-model-view-viewmodel-pattern
│ ├── final
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ ├── Controllers
│ │ │ │ ├── Resources
│ │ │ │ │ └── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── bad.imageset
│ │ │ │ │ ├── good.imageset
│ │ │ │ │ ├── great.imageset
│ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ ├── meh.imageset
│ │ │ │ │ └── terrible.imageset
│ │ │ │ ├── ViewModels
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Pods
│ │ │ ├── Pods.xcodeproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ └── YelpAPI
│ │ │ └── YelpAPI
│ │ │ └── Classes
│ │ │ ├── Client
│ │ │ ├── Common
│ │ │ ├── Request
│ │ │ └── Response
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── starter
│ ├── CoffeeQuest
│ │ ├── CoffeeQuest
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── bad.imageset
│ │ │ │ ├── good.imageset
│ │ │ │ ├── great.imageset
│ │ │ │ ├── Launch.imageset
│ │ │ │ ├── meh.imageset
│ │ │ │ └── terrible.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── CoffeeQuest.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── CoffeeQuest.xcworkspace
│ │ │ └── xcshareddata
│ │ └── Pods
│ │ ├── Pods.xcodeproj
│ │ ├── Target Support Files
│ │ │ ├── Pods-CoffeeQuest
│ │ │ └── YelpAPI
│ │ └── YelpAPI
│ │ └── Classes
│ │ ├── Client
│ │ ├── Common
│ │ ├── Request
│ │ └── Response
│ └── IntermediateDesignPatterns.xcworkspace
│ ├── IntermediateDesignPatterns.playground
│ │ └── Pages
│ │ ├── Adapter.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Facade.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Factory.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Iterator.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ ├── MVVM.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Overview.xcplaygroundpage
│ │ ├── Prototype.xcplaygroundpage
│ │ │ └── Resources
│ │ └── State.xcplaygroundpage
│ │ └── Resources
│ └── xcshareddata
├── 11-factory-pattern
│ ├── final
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ ├── Controllers
│ │ │ │ ├── Factories
│ │ │ │ ├── Resources
│ │ │ │ │ └── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── bad.imageset
│ │ │ │ │ ├── good.imageset
│ │ │ │ │ ├── great.imageset
│ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ ├── meh.imageset
│ │ │ │ │ └── terrible.imageset
│ │ │ │ ├── ViewModels
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Pods
│ │ │ ├── Pods.xcodeproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ └── YelpAPI
│ │ │ └── YelpAPI
│ │ │ └── Classes
│ │ │ ├── Client
│ │ │ ├── Common
│ │ │ ├── Request
│ │ │ └── Response
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── starter
│ ├── CoffeeQuest
│ │ ├── CoffeeQuest
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── bad.imageset
│ │ │ │ ├── good.imageset
│ │ │ │ ├── great.imageset
│ │ │ │ ├── Launch.imageset
│ │ │ │ ├── meh.imageset
│ │ │ │ └── terrible.imageset
│ │ │ ├── ViewModels
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── CoffeeQuest.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── CoffeeQuest.xcworkspace
│ │ │ └── xcshareddata
│ │ └── Pods
│ │ ├── Pods.xcodeproj
│ │ ├── Target Support Files
│ │ │ ├── Pods-CoffeeQuest
│ │ │ └── YelpAPI
│ │ └── YelpAPI
│ │ └── Classes
│ │ ├── Client
│ │ ├── Common
│ │ ├── Request
│ │ └── Response
│ └── IntermediateDesignPatterns.xcworkspace
│ ├── IntermediateDesignPatterns.playground
│ │ └── Pages
│ │ ├── Adapter.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Facade.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Factory.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Iterator.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ ├── MVVM.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Overview.xcplaygroundpage
│ │ ├── Prototype.xcplaygroundpage
│ │ │ └── Resources
│ │ └── State.xcplaygroundpage
│ │ └── Resources
│ └── xcshareddata
├── 12-adapter-pattern
│ ├── final
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ ├── Controllers
│ │ │ │ ├── Factories
│ │ │ │ ├── Models
│ │ │ │ ├── Resources
│ │ │ │ │ └── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── bad.imageset
│ │ │ │ │ ├── good.imageset
│ │ │ │ │ ├── great.imageset
│ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ ├── meh.imageset
│ │ │ │ │ └── terrible.imageset
│ │ │ │ ├── ViewModels
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Pods
│ │ │ ├── Pods.xcodeproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ └── YelpAPI
│ │ │ └── YelpAPI
│ │ │ └── Classes
│ │ │ ├── Client
│ │ │ ├── Common
│ │ │ ├── Request
│ │ │ └── Response
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── starter
│ ├── CoffeeQuest
│ │ ├── CoffeeQuest
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Factories
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── bad.imageset
│ │ │ │ ├── good.imageset
│ │ │ │ ├── great.imageset
│ │ │ │ ├── Launch.imageset
│ │ │ │ ├── meh.imageset
│ │ │ │ └── terrible.imageset
│ │ │ ├── ViewModels
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── CoffeeQuest.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── CoffeeQuest.xcworkspace
│ │ │ └── xcshareddata
│ │ └── Pods
│ │ ├── Pods.xcodeproj
│ │ ├── Target Support Files
│ │ │ ├── Pods-CoffeeQuest
│ │ │ └── YelpAPI
│ │ └── YelpAPI
│ │ └── Classes
│ │ ├── Client
│ │ ├── Common
│ │ ├── Request
│ │ └── Response
│ └── IntermediateDesignPatterns.xcworkspace
│ ├── IntermediateDesignPatterns.playground
│ │ └── Pages
│ │ ├── Adapter.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Facade.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Factory.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Iterator.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ ├── MVVM.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Overview.xcplaygroundpage
│ │ ├── Prototype.xcplaygroundpage
│ │ │ └── Resources
│ │ └── State.xcplaygroundpage
│ │ └── Resources
│ └── xcshareddata
├── 13-iterator-pattern
│ ├── final
│ │ ├── CoffeeQuest
│ │ │ ├── CoffeeQuest
│ │ │ │ ├── AppDelegate
│ │ │ │ ├── Controllers
│ │ │ │ ├── Factories
│ │ │ │ ├── Models
│ │ │ │ ├── Resources
│ │ │ │ │ └── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── bad.imageset
│ │ │ │ │ ├── good.imageset
│ │ │ │ │ ├── great.imageset
│ │ │ │ │ ├── Launch.imageset
│ │ │ │ │ ├── meh.imageset
│ │ │ │ │ └── terrible.imageset
│ │ │ │ ├── ViewModels
│ │ │ │ └── Views
│ │ │ │ └── Base.lproj
│ │ │ ├── CoffeeQuest.xcodeproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ ├── CoffeeQuest.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── Pods
│ │ │ ├── Pods.xcodeproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-CoffeeQuest
│ │ │ │ └── YelpAPI
│ │ │ └── YelpAPI
│ │ │ └── Classes
│ │ │ ├── Client
│ │ │ ├── Common
│ │ │ ├── Request
│ │ │ └── Response
│ │ └── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── starter
│ ├── CoffeeQuest
│ │ ├── CoffeeQuest
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Factories
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── bad.imageset
│ │ │ │ ├── good.imageset
│ │ │ │ ├── great.imageset
│ │ │ │ ├── Launch.imageset
│ │ │ │ ├── meh.imageset
│ │ │ │ └── terrible.imageset
│ │ │ ├── ViewModels
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── CoffeeQuest.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ ├── CoffeeQuest.xcworkspace
│ │ │ └── xcshareddata
│ │ └── Pods
│ │ ├── Pods.xcodeproj
│ │ ├── Target Support Files
│ │ │ ├── Pods-CoffeeQuest
│ │ │ └── YelpAPI
│ │ └── YelpAPI
│ │ └── Classes
│ │ ├── Client
│ │ ├── Common
│ │ ├── Request
│ │ └── Response
│ └── IntermediateDesignPatterns.xcworkspace
│ ├── IntermediateDesignPatterns.playground
│ │ └── Pages
│ │ ├── Adapter.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Facade.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Factory.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Iterator.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ ├── MVVM.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Overview.xcplaygroundpage
│ │ ├── Prototype.xcplaygroundpage
│ │ │ └── Resources
│ │ └── State.xcplaygroundpage
│ │ └── Resources
│ └── xcshareddata
├── 14-prototype-pattern
│ ├── final
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Protocols
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── expand_arrows.imageset
│ │ │ │ └── launch_background.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── MirrorPad
│ ├── MirrorPad
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── expand_arrows.imageset
│ │ │ └── launch_background.imageset
│ │ └── Views
│ │ └── Base.lproj
│ └── MirrorPad.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 15-state-pattern
│ ├── final
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Protocols
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── expand_arrows.imageset
│ │ │ │ └── launch_background.imageset
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ └── DrawView
│ │ │ └── States
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── MirrorPad
│ ├── MirrorPad
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Protocols
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── expand_arrows.imageset
│ │ │ └── launch_background.imageset
│ │ └── Views
│ │ └── Base.lproj
│ └── MirrorPad.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 16-multicast-delegate-pattern
│ ├── final
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Protocols
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── expand_arrows.imageset
│ │ │ │ └── launch_background.imageset
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ └── DrawView
│ │ │ └── States
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── MirrorPad
│ ├── MirrorPad
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Protocols
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── expand_arrows.imageset
│ │ │ └── launch_background.imageset
│ │ └── Views
│ │ ├── Base.lproj
│ │ └── DrawView
│ │ └── States
│ └── MirrorPad.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 17-facade-pattern
│ ├── final
│ │ ├── IntermediateDesignPatterns.xcworkspace
│ │ │ ├── IntermediateDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Overview.xcplaygroundpage
│ │ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ └── State.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── xcshareddata
│ │ └── MirrorPad
│ │ ├── MirrorPad
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Facades
│ │ │ ├── Protocols
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── expand_arrows.imageset
│ │ │ │ └── launch_background.imageset
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ └── DrawView
│ │ │ └── States
│ │ └── MirrorPad.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ ├── resources
│ └── starter
│ ├── IntermediateDesignPatterns.xcworkspace
│ │ ├── IntermediateDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── Adapter.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Facade.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Factory.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Iterator.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── MulticastDelegate.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── MVVM.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ ├── Prototype.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ └── State.xcplaygroundpage
│ │ │ └── Resources
│ │ └── xcshareddata
│ └── MirrorPad
│ ├── MirrorPad
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Protocols
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── expand_arrows.imageset
│ │ │ └── launch_background.imageset
│ │ └── Views
│ │ ├── Base.lproj
│ │ └── DrawView
│ │ └── States
│ └── MirrorPad.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 18-flyweight-pattern
│ ├── final
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ └── Routers
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ └── xcshareddata
│ │ └── YetiJokes
│ │ ├── YetiJokes
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── background.imageset
│ │ │ │ └── cool_yeti.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── YetiJokes.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── xcshareddata
│ │ └── YetiTheme
│ │ ├── YetiTheme
│ │ └── YetiTheme.xcodeproj
│ │ └── project.xcworkspace
│ │ └── xcshareddata
│ └── starter
│ ├── AdvancedDesignPatterns.xcworkspace
│ │ ├── AdvancedDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Command.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ │ ├── Controllers
│ │ │ │ ├── Coordinators
│ │ │ │ └── Routers
│ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── Overview.xcplaygroundpage
│ │ └── xcshareddata
│ └── YetiJokes
│ ├── YetiJokes
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── background.imageset
│ │ │ └── cool_yeti.imageset
│ │ └── Views
│ │ └── Base.lproj
│ ├── YetiJokes.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── YetiTheme
│ ├── YetiTheme
│ └── YetiTheme.xcodeproj
│ └── project.xcworkspace
│ └── xcshareddata
├── 19-mediator-pattern
│ ├── final
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ └── Routers
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ └── xcshareddata
│ │ └── YetiDate
│ │ ├── Pods
│ │ │ ├── Pods.xcodeproj
│ │ │ ├── Target Support Files
│ │ │ │ ├── Pods-YetiDate
│ │ │ │ └── YelpAPI
│ │ │ └── YelpAPI
│ │ │ └── Classes
│ │ │ ├── Client
│ │ │ ├── Common
│ │ │ ├── Request
│ │ │ └── Response
│ │ ├── YetiDate
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Extensions
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── background_yeti_date.imageset
│ │ │ │ ├── ic_bar.imageset
│ │ │ │ ├── ic_bar_large.imageset
│ │ │ │ ├── ic_circle_check.imageset
│ │ │ │ ├── ic_food.imageset
│ │ │ │ ├── ic_food_large.imageset
│ │ │ │ ├── ic_movie.imageset
│ │ │ │ └── ic_movie_large.imageset
│ │ │ ├── SearchClient
│ │ │ │ └── Protocols
│ │ │ ├── Utils
│ │ │ ├── ViewModels
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── YetiDate.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ └── YetiDate.xcworkspace
│ │ └── xcshareddata
│ └── starter
│ ├── AdvancedDesignPatterns.xcworkspace
│ │ ├── AdvancedDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Command.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ │ ├── Controllers
│ │ │ │ ├── Coordinators
│ │ │ │ └── Routers
│ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── Overview.xcplaygroundpage
│ │ └── xcshareddata
│ └── YetiDate
│ ├── Pods
│ │ ├── Pods.xcodeproj
│ │ ├── Target Support Files
│ │ │ ├── Pods-YetiDate
│ │ │ └── YelpAPI
│ │ └── YelpAPI
│ │ └── Classes
│ │ ├── Client
│ │ ├── Common
│ │ ├── Request
│ │ └── Response
│ ├── YetiDate
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Extensions
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── background_yeti_date.imageset
│ │ │ ├── ic_bar.imageset
│ │ │ ├── ic_bar_large.imageset
│ │ │ ├── ic_circle_check.imageset
│ │ │ ├── ic_food.imageset
│ │ │ ├── ic_food_large.imageset
│ │ │ ├── ic_movie.imageset
│ │ │ └── ic_movie_large.imageset
│ │ ├── SearchClient
│ │ │ └── Protocols
│ │ ├── Utils
│ │ ├── ViewModels
│ │ └── Views
│ │ └── Base.lproj
│ ├── YetiDate.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ │ └── xcschemes
│ └── YetiDate.xcworkspace
│ └── xcshareddata
├── 20-composite-pattern
│ ├── final
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ └── Routers
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ └── xcshareddata
│ │ └── DefeatYourToDoList
│ │ ├── DefeatYourToDoList
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── door.imageset
│ │ │ │ ├── helmet.imageset
│ │ │ │ ├── NinjaCat.imageset
│ │ │ │ └── treasure.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ └── DefeatYourToDoList.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── AdvancedDesignPatterns.xcworkspace
│ │ ├── AdvancedDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Command.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ │ ├── Controllers
│ │ │ │ ├── Coordinators
│ │ │ │ └── Routers
│ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── Overview.xcplaygroundpage
│ │ └── xcshareddata
│ └── DefeatYourToDoList
│ ├── DefeatYourToDoList
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── door.imageset
│ │ │ ├── helmet.imageset
│ │ │ ├── NinjaCat.imageset
│ │ │ └── treasure.imageset
│ │ └── Views
│ │ └── Base.lproj
│ └── DefeatYourToDoList.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 21-command-pattern
│ ├── final
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ └── Routers
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ └── xcshareddata
│ │ └── RayWenToe
│ │ ├── RayWenToe
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ │ └── GameManager
│ │ │ │ └── States
│ │ │ ├── Models
│ │ │ ├── Protocols
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── ic_settings.imageset
│ │ │ │ └── launch_background.imageset
│ │ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ └── MarkViews
│ │ ├── RayWenToeTests
│ │ └── RayWenToe.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── starter
│ ├── AdvancedDesignPatterns.xcworkspace
│ │ ├── AdvancedDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Command.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ │ ├── Controllers
│ │ │ │ ├── Coordinators
│ │ │ │ └── Routers
│ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── Overview.xcplaygroundpage
│ │ └── xcshareddata
│ └── RayWenToe
│ ├── RayWenToe
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ │ └── GameManager
│ │ │ └── States
│ │ ├── Models
│ │ ├── Protocols
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── ic_settings.imageset
│ │ │ └── launch_background.imageset
│ │ └── Views
│ │ ├── Base.lproj
│ │ └── MarkViews
│ ├── RayWenToeTests
│ └── RayWenToe.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
├── 22-chain-of-responsibility
│ ├── final
│ │ ├── AdvancedDesignPatterns.xcworkspace
│ │ │ ├── AdvancedDesignPatterns.playground
│ │ │ │ └── Pages
│ │ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Command.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ │ ├── Controllers
│ │ │ │ │ ├── Coordinators
│ │ │ │ │ └── Routers
│ │ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ │ └── Resources
│ │ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Sources
│ │ │ │ └── Overview.xcplaygroundpage
│ │ │ └── xcshareddata
│ │ └── RWSecret
│ │ ├── Pods
│ │ │ ├── Pods.xcodeproj
│ │ │ ├── RNCryptor
│ │ │ │ └── Sources
│ │ │ │ ├── Cryptor
│ │ │ │ │ └── include
│ │ │ │ └── RNCryptor
│ │ │ ├── SwiftKeychainWrapper
│ │ │ │ └── SwiftKeychainWrapper
│ │ │ └── Target Support Files
│ │ │ ├── Pods-RWSecret
│ │ │ ├── Pods-RWSecret-RWSecretTests
│ │ │ ├── RNCryptor
│ │ │ └── SwiftKeychainWrapper
│ │ ├── RWSecret
│ │ │ ├── AppDelegate
│ │ │ ├── Controllers
│ │ │ ├── Models
│ │ │ ├── PasswordClient
│ │ │ ├── Resources
│ │ │ │ └── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── launch_background.imageset
│ │ │ └── Views
│ │ │ └── Base.lproj
│ │ ├── RWSecretTests
│ │ │ ├── Cases
│ │ │ └── Supporting Files
│ │ ├── RWSecret.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ └── xcshareddata
│ │ └── RWSecret.xcworkspace
│ │ └── xcshareddata
│ └── starter
│ ├── AdvancedDesignPatterns.xcworkspace
│ │ ├── AdvancedDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Command.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ │ ├── Controllers
│ │ │ │ ├── Coordinators
│ │ │ │ └── Routers
│ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ └── Overview.xcplaygroundpage
│ │ └── xcshareddata
│ └── RWSecret
│ ├── Pods
│ │ ├── Pods.xcodeproj
│ │ ├── RNCryptor
│ │ │ └── Sources
│ │ │ ├── Cryptor
│ │ │ │ └── include
│ │ │ └── RNCryptor
│ │ ├── SwiftKeychainWrapper
│ │ │ └── SwiftKeychainWrapper
│ │ └── Target Support Files
│ │ ├── Pods-RWSecret
│ │ ├── Pods-RWSecret-RWSecretTests
│ │ ├── RNCryptor
│ │ └── SwiftKeychainWrapper
│ ├── RWSecret
│ │ ├── AppDelegate
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── PasswordClient
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ └── launch_background.imageset
│ │ └── Views
│ │ └── Base.lproj
│ ├── RWSecretTests
│ │ ├── Cases
│ │ └── Supporting Files
│ ├── RWSecret.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ └── xcshareddata
│ └── RWSecret.xcworkspace
│ └── xcshareddata
└── 23-coordinator-pattern
├── final
│ ├── AdvancedDesignPatterns.xcworkspace
│ │ ├── AdvancedDesignPatterns.playground
│ │ │ └── Pages
│ │ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Command.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Composite.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Coordinator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ │ ├── Controllers
│ │ │ │ ├── Coordinators
│ │ │ │ └── Routers
│ │ │ ├── Flyweight.xcplaygroundpage
│ │ │ │ └── Resources
│ │ │ ├── Mediator.xcplaygroundpage
│ │ │ │ ├── Resources
│ │ │ │ └── Sources
│ │ │ ├── Overview.xcplaygroundpage
│ │ │ └── Proxy.xcplaygroundpage
│ │ └── xcshareddata
│ └── RayPets
│ ├── RayPets
│ │ ├── AppDelegate
│ │ ├── Coordinators
│ │ ├── Models
│ │ ├── Resources
│ │ │ └── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ ├── faking_it.imageset
│ │ │ ├── logo.imageset
│ │ │ ├── no_appointment_owl.imageset
│ │ │ ├── pain_level_little.imageset
│ │ │ ├── pain_level_moderate.imageset
│ │ │ ├── pain_level_none.imageset
│ │ │ ├── pain_level_severe.imageset
│ │ │ ├── pain_level_worst_possible.imageset
│ │ │ ├── visit_type_sick.imageset
│ │ │ └── visit_type_well.imageset
│ │ ├── Routers
│ │ └── Screens
│ │ ├── FakingIt
│ │ ├── Home
│ │ │ ├── Controllers
│ │ │ └── Views
│ │ ├── NoAppointmentRequired
│ │ │ ├── Controllers
│ │ │ └── Views
│ │ ├── PainLevel
│ │ │ ├── Controllers
│ │ │ └── Views
│ │ ├── Protocols
│ │ └── VisitType
│ │ ├── Controllers
│ │ └── Views
│ └── RayPets.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ └── xcshareddata
└── starter
├── AdvancedDesignPatterns.xcworkspace
│ ├── AdvancedDesignPatterns.playground
│ │ └── Pages
│ │ ├── ChainOfResponsibility.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Command.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Composite.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Coordinator.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ │ ├── Controllers
│ │ │ ├── Coordinators
│ │ │ └── Routers
│ │ ├── Flyweight.xcplaygroundpage
│ │ │ └── Resources
│ │ ├── Mediator.xcplaygroundpage
│ │ │ ├── Resources
│ │ │ └── Sources
│ │ ├── Overview.xcplaygroundpage
│ │ └── Proxy.xcplaygroundpage
│ └── xcshareddata
└── RayPets
├── RayPets
│ ├── AppDelegate
│ ├── Coordinators
│ ├── Models
│ ├── Resources
│ │ └── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ ├── faking_it.imageset
│ │ ├── logo.imageset
│ │ ├── no_appointment_owl.imageset
│ │ ├── pain_level_little.imageset
│ │ ├── pain_level_moderate.imageset
│ │ ├── pain_level_none.imageset
│ │ ├── pain_level_severe.imageset
│ │ ├── pain_level_worst_possible.imageset
│ │ ├── visit_type_sick.imageset
│ │ └── visit_type_well.imageset
│ ├── Routers
│ └── Screens
│ ├── FakingIt
│ ├── Home
│ │ ├── Controllers
│ │ └── Views
│ ├── NoAppointmentRequired
│ │ ├── Controllers
│ │ └── Views
│ ├── PainLevel
│ │ ├── Controllers
│ │ └── Views
│ ├── Protocols
│ └── VisitType
│ ├── Controllers
│ └── Views
└── RayPets.xcodeproj
├── project.xcworkspace
│ └── xcshareddata
└── xcshareddata
4025 directories, 3894 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论