Skip to content

Instantly share code, notes, and snippets.

@atulkhatri
atulkhatri / AppDelegate.swift
Last active July 12, 2021 16:55
tvOS Bootcamp AppDelegate
window = UIWindow(frame: UIScreen.main.bounds)
let controller = HomeViewController(nibName: "HomeViewController", bundle: nil)
window?.rootViewController = controller
window?.makeKeyAndVisible()
@atulkhatri
atulkhatri / TabBarViewController.swift
Created July 12, 2021 16:54
tvOS Bootcamp TabBarViewController
private func setupView() {
let moviesVC = HomeViewController(nibName: "HomeViewController", bundle: nil)
moviesVC.title = "Movies"
let seriesVC = HomeViewController(nibName: "HomeViewController", bundle: nil)
seriesVC.title = "Series"
let settingsVC = SettingsViewController(nibName: "SettingsViewController", bundle: nil)
settingsVC.title = "Settings"
viewControllers = [moviesVC, seriesVC, settingsVC]
}
@atulkhatri
atulkhatri / NetworkManager.swift
Created July 12, 2021 17:02
tvOS Bootcamp Network Manager
struct NetworkManager {
}
@atulkhatri
atulkhatri / NetworkManager3.swift
Created July 12, 2021 17:04
tvOS Bootcamp Network Manager 3
private func executeRequest<T: Codable>(request: URLRequest, completion: ((T?, Error?) -> Void)?) {
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: request) { (data, response, error) in
guard let data = data else {
completion?(nil, error)
return
}
if let decodedResponse = try? JSONDecoder().decode(T.self, from: data) {
DispatchQueue.main.async {
completion?(decodedResponse, nil)
@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)
}
}
@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 / NetworkManager6.swift
Created July 12, 2021 17:07
tvOS Bootcamp Network Manager 6
enum NetworkError: Error {
case invalidUrl
case invalidData
}
@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 / 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 / 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
}