Skip to content

Instantly share code, notes, and snippets.

@atulkhatri
atulkhatri / HomeViewController4.swift
Created July 12, 2021 17:22
tvOS Bootcamp Home Screen 4
private func fetchData() {
switch type {
case .movies:
NetworkManager().fetchMovieData { [weak self] (page, error) in
guard let self = self else { return }
if let page = page {
self.loadData(page: page)
} else {
print("No movies found!!")
}
@atulkhatri
atulkhatri / HomeViewController3.swift
Created July 12, 2021 17:21
tvOS Bootcamp Home Screen 3
extension HomeViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
switch type {
case .movies: return CGSize(width: collectionView.frame.size.width, height: Constants.moviesCellHeight)
case .series: return CGSize(width: collectionView.frame.size.width, height: Constants.seriesCellHeight)
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionView.frame.size.width, height: Constants.sectionHeaderHeight)
@atulkhatri
atulkhatri / HomeViewControlller2.swift
Created July 12, 2021 17:21
tvOS Bootcamp Home Screen 2
extension HomeViewController: UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return pageModel?.data.count ?? 0
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
@atulkhatri
atulkhatri / HomeViewController.swift
Created July 12, 2021 17:20
tvOS Bootcamp Home Screen
// These are defined on top of the file
private let kRailCellIdentifier = "RailCell"
private let kRailHeaderIdentifier = "RailHeaderView"
class HomeViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
setupView()
@atulkhatri
atulkhatri / NetworkManager2.swift
Created July 12, 2021 17:15
tvOS Bootcamp Network Manager 2
private func createRequest(for url: String) -> URLRequest? {
guard let url = URL(string: url) else { return nil }
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
return request
}
@atulkhatri
atulkhatri / NetworkManager8.swift
Created July 12, 2021 17:09
tvOS Bootcamp Network Manager 8
NetworkManager().fetchMovieData { [weak self] (page, error) in
guard let self = self else { return }
if let page = page {
self.loadData(page: page)
} else {
print("No movies found!!")
}
}
@atulkhatri
atulkhatri / NetworkManager7.swift
Created July 12, 2021 17:08
tvOS Bootcamp Network Manager 7
struct PageModel: Codable {
let data: [RailModel]
}
struct RailModel: Codable {
let title, type: String
let list: [AssetModel]
}
struct AssetModel: Codable {
@atulkhatri
atulkhatri / NetworkManager6.swift
Created July 12, 2021 17:07
tvOS Bootcamp Network Manager 6
enum NetworkError: Error {
case invalidUrl
case invalidData
}
@atulkhatri
atulkhatri / NetworkManager5.swift
Created July 12, 2021 17:06
tvOS Bootcamp Network Manager 5
typealias RailCompletionClosure = ((PageModel?, Error?) -> Void)
public func fetchMovieData(completion: RailCompletionClosure?) {
guard let request = createRequest(for: "https://raw.githubusercontent.com/atulkhatri/random/master/bootcamp-home-movies.json") else {
completion?(nil, NetworkError.invalidUrl)
return
}
executeRequest(request: request, completion: completion)
}
@atulkhatri
atulkhatri / NetworkManager4.swift
Created July 12, 2021 17:06
tvOS Bootcamp Network Manager 4
if let decodedResponse = try? JSONDecoder().decode(T.self, from: data) {
DispatchQueue.main.async {
completion?(decodedResponse, nil)
}
}