Skip to content

Instantly share code, notes, and snippets.

View malcolmkmd's full-sized avatar
🎯
Focusing

Malcolm malcolmkmd

🎯
Focusing
View GitHub Profile
@malcolmkmd
malcolmkmd / UIImageView+Cache.swift
Last active March 11, 2020 13:54
SwiftBits: Caching Images
public extension UIImageView {
public func loadImage(fromURL url: String) {
guard let imageURL = URL(string: url) else {
return
}
let cache = URLCache.shared
let request = URLRequest(url: imageURL)
DispatchQueue.global(qos: .userInitiated).async {
if let data = cache.cachedResponse(for: request)?.data, let image = UIImage(data: data) {
@malcolmkmd
malcolmkmd / UIView+Anchors.swift
Created July 10, 2017 11:16
UIView Extensions
import Foundation
import UIKit
extension UIView {
func addConstraintsWithFormat(_ format: String, views: UIView...) {
var viewsDictionary = [String: UIView]()
for (index, view) in views.enumerated() {
let key = "v\(index)"
@malcolmkmd
malcolmkmd / keybase.md
Created February 13, 2019 12:21
Keybase

Keybase proof

I hereby claim:

  • I am mackis on github.
  • I am mdevsa (https://keybase.io/mdevsa) on keybase.
  • I have a public key ASC1AIL2E16t6e0qCo0G0M-Nr5rZcWrUoxYyTwG04-HMago

To claim this, I am signing this object:

@malcolmkmd
malcolmkmd / MDVUnderlineAnimator.swift
Last active May 16, 2018 06:11
UnderlineAnimator
import UIKit
public class MDVUnderlineAnimator: MDVTabBarAnimatable {
private var underlineColor: UIColor = .clear
private var underlineHeight: CGFloat = 0
private var xPosition: CGFloat = 0
private var yPositionOffset: CGFloat = 0
private var containerWidth: CGFloat = 0
private var underlineView: UIView = UIView(frame: .zero)
@malcolmkmd
malcolmkmd / MainViewController.swift
Created March 19, 2018 18:43
Example MainViewController
class MainViewController: UIViewController {
var networkManager: NetworkManager!
init(networkManager: NetworkManager) {
super.init(nibName: nil, bundle: nil)
self.networkManager = networkManager
}
required init?(coder aDecoder: NSCoder) {
@malcolmkmd
malcolmkmd / MovieEndPoint.swift
Created March 19, 2018 18:41
Movie EndPoint
import Foundation
enum NetworkEnvironment {
case qa
case production
case staging
}
public enum MovieApi {
import Foundation
struct MovieApiResponse {
let page: Int
let numberOfResults: Int
let numberOfPages: Int
let movies: [Movie]
}
extension MovieApiResponse: Decodable {
@malcolmkmd
malcolmkmd / ExampleMovie.json
Created January 24, 2018 18:33
Example Movie JSON response from the TMDB
{
"vote_count": 78,
"id": 374430,
"video": false,
"vote_average": 8.8,
"title": "Black Mirror: White Christmas",
"popularity": 3.055805,
"poster_path": "/he609rnU3tiwBjRklKNa4n2jQSd.jpg",
"original_language": "en",
"original_title": "Black Mirror: White Christmas",
@malcolmkmd
malcolmkmd / Ext+UITableView.swift
Last active September 20, 2017 06:46
UITableview nibloadable
import UIKit
extension UITableView {
func register<T: UITableViewCell>(_: T.Type) {
let nib = UINib(nibName: T.nibName, bundle: nil)
register(nib, forCellReuseIdentifier: T.reuseIdentifier)
}
func dequeueReusableCell<T: UITableViewCell>(forIndexPath indexPath: IndexPath) -> T {
@malcolmkmd
malcolmkmd / Nibloadable.swift
Created September 20, 2017 06:45
Nibloadable
import UIKit
protocol NibLoadableView: class { }
extension NibLoadableView {
static var nibName: String {
return String(describing: self)
}