YouTubeSampleWithMVP-DiffableDataSource

This is a YouTube like iOS app sample with the Model-View-Presenter pattern.

MIT License

Stars
8

YouTubeSampleWithMVP-DiffableDataSource

This is a YouTube like app sample with the Model-View-Presenter pattern. It uses DiffableDataSource to display search view and detail view.

Getting Started

Let's create you project on Google Cloud Platform and add an API Key to access YouTube Data API v3. https://console.cloud.google.com/apis/credentials

If you could create an API key, add it to Info.plist as YouTubeApiKey.

View Structure

Detail.Item relates to Views.

Detail.Item View
.summary DetailSummaryView
.channel DetailChannelView
.description DetailDescriptionView
.video VideoView
.loading LoadingView

Detail.Item is appended to NSDiffableDataSourceSnapshot with any Detail.Section and reflects snapshot to UITableView.

enum Detail {
    enum Section: Hashable {
        case information
        case videos(segments: [VideoSegment])
        case loading
    }

    enum Item: Hashable {
        case summary(SummaryViewData)
        case channel(ChannelViewData)
        case description(String)
        case video(VideoViewData)
        case loading
    }
    ...
}

View Snapshot
stackView.axis = .vertical

When you tap a triangle button on DetailSummaryView, Item.descriptin is inserted to bottom of Section.information. If that state is refrected to UITableView, it displays DetailDescriptionView with fade animation.

View Snapshot
stackView.axis = .vertical

When you rotate your device, stackview.axis is changed to .horizontal. The layout will change that left side is player, right side is UITableView.

View Snapshot
stackView.axis = .horizontal

Requirement

  • Xcode 12.4
  • iOS 14.1
  • Nuke

License

YouTubeSampleWithMVP-DiffableDataSource is available under the MIT license. See the LICENSE file for more info.

Related Projects