Skip to content

Instantly share code, notes, and snippets.

View mitulmanish's full-sized avatar
🍏
🛩🇪🇪

mitul_manish mitulmanish

🍏
🛩🇪🇪
View GitHub Profile

Keybase proof

I hereby claim:

  • I am mitulmanish on github.
  • I am min_max23 (https://keybase.io/min_max23) on keybase.
  • I have a public key ASCPfkARcw8kzwxd2aWzpvrWLaqBgtYIfQJFax8ADdknkAo

To claim this, I am signing this object:

enum ImageDownloadError: Error {
case url(errorDescription: String)
case data(errorDescription: String)
}
class CustomImageView: UIImageView {
var downloadTask: URLSessionDataTask?
func loadImageUsing(urlString string: String,
finishedLoadingImage: @escaping (Error?) -> ()) {
struct AssetSaveHelper {
static var documentsDirectoryUrl: URL? {
return FileManager().urls(for: .cachesDirectory, in: .userDomainMask).first
}
static var cacheURL: URL? {
guard let url = documentsDirectoryUrl else {
return nil
}
class DashboardCollectionViewController: UICollectionViewController {
override func viewDidLoad() {
collectionView?.register(DashboardCollectionViewCell.self, forCellWithReuseIdentifier: DashboardCollectionViewCell.cellIdentifier)
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
enum ResourceError: Error {
case bundle
}
enum ResourceType: String {
case tv = "tv"
case movies = "movies"
var dataType: String {
switch self {
extension UIView {
func pin(toView view: UIView) {
self.translatesAutoresizingMaskIntoConstraints = false
let topConstraint = self.topAnchor.constraint(equalTo:
view.topAnchor)
let bottomConstraint = self.bottomAnchor.constraint(equalTo: view.bottomAnchor)
let leadingConstraint = self.leadingAnchor.constraint(equalTo: view.leadingAnchor)
let trailingConstraint = self.trailingAnchor.constraint(equalTo: view.trailingAnchor)
NSLayoutConstraint.activate([topConstraint,
leadingConstraint,
class DashboardCollectionViewCell: UICollectionViewCell {
static var cellIdentifier: String {
return "dashboard-cell-identifier"
}
var imageView: CustomImageView = {
let imageView = CustomImageView()
imageView.clipsToBounds = true
imageView.contentMode = .scaleToFill
class MoviesViewModel: ViewModelProtocol {
var resourceType: ResourceType {
return .movies
}
var items: [Movie] = [Movie]()
typealias Item = Movie
required init?() {
class TVShowsViewModel: ViewModelProtocol {
var items: [TVShow] = [TVShow]()
typealias Item = TVShow
var resourceType: ResourceType {
return .tv
}
required init?() {
guard let data = try? getData(forResourceType: resourceType) else {
protocol ViewModelProtocol: class {
associatedtype Item: Equatable
init?()
var items: [Item] { get }
var count: Int { get }
func getData(forResourceType resource: ResourceType) throws -> Data
func extractItems(fromData data: Data) -> [Item]
var resourceType: ResourceType { get }
}