Skip to content

Instantly share code, notes, and snippets.

View jonathanduty's full-sized avatar

Jonathan Duty jonathanduty

View GitHub Profile
// we use the RxJava2CallAdapterFactory to wrap all of our retrofit api calls in a
// RxJava2 Single
public class BoundAPI {
private static BoundApi sInstance = null;
private final BoundApiService mService;
public static BoundApi getInstance(OkHttpProvider okHttpProvider, GsonProvider gsonProvider) {
@jonathanduty
jonathanduty / GsonIsoDateSerializer.java
Created April 8, 2019 11:07
GsonIsoDateSerializer for ISO8601 date formats
package radtabinc.radtab.api;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.JsonSyntaxException;
@jonathanduty
jonathanduty / UIView+Extensions.swift
Last active March 27, 2019 10:39
UIView+Extensions
extension UIView {
class func fromNib<T: UIView>() -> T {
return Bundle.main.loadNibNamed(String(describing: T.self), owner: nil, options: nil)![0] as! T
}
}
@jonathanduty
jonathanduty / OptionalOperator.swift
Created August 9, 2018 13:05
Option operator for assigning
/// Optional Assignment, assigns if value exists
infix operator ?=: AssignmentPrecedence
func ?=<T>(lhs: inout T, rhs: T?) {
guard let value = rhs else { return }
lhs = value
}
import Foundation
import UIKit
import Cartography
class LoadingView: UIView {
let activityView = UIActivityIndicatorView(frame: .zero)
let overlayView = UIView(frame: .zero)
override init(frame: CGRect) {
@jonathanduty
jonathanduty / UIViewController+Extensions.swift
Created June 29, 2018 12:28
UIViewController+Extensions.swift
import UIKit
enum UIViewControllerDismissType {
case pop
case dismiss
}
extension UIViewController {
func presentAlertWithTitle(title: String = "Oops!", message: String, actions: [UIAlertAction] = [], preferredStyle: UIAlertControllerStyle = .alert, onComplete: ((KeystoneResultSimple) -> Void)? = nil) {
@jonathanduty
jonathanduty / Device+Extensions.swift
Created June 29, 2018 12:27
Device+Extensions.swift
import UIKit
struct Device {
let ran: Bool
@discardableResult static func whenIphoneX(_ block: () -> Void) -> Device {
return runIfTrue(Device.isIphoneX, block: block)
}
@discardableResult static func whenNotIphoneX(_ block: () -> Void) -> Device {
return runIfFalse(Device.isIphoneX, block: block)
@jonathanduty
jonathanduty / NSManagedObjectContext+Extensions.swift
Created June 29, 2018 12:26
NSManagedObjectContext+Extensions.swift
import CoreData
public extension NSManagedObjectContext {
@discardableResult func saveToStore() -> NSError? {
var currentContext: NSManagedObjectContext? = self
var error: NSError? = nil
var hasChanges = true
while let context = currentContext, (error == nil && hasChanges) {
@jonathanduty
jonathanduty / UIStoryboard+Extensions.swift
Created June 29, 2018 12:26
UIStoryboard+Extensions.swift
import UIKit
extension UIStoryboard {
static func fromStoryboard(named: String) -> UIViewController? {
return UIStoryboard(name: named, bundle: nil).instantiateInitialViewController()
}
static func fromStoryboard(named: String, get: String) -> UIViewController? {
return UIStoryboard(name: named, bundle: nil).instantiateViewController(withIdentifier: get)
import UIKit
extension UIView {
var absoluteFrame: CGRect {
return self.superview!.convert(self.frame, to: nil)
}
func convertFrame(toParentView parentView: UIView) -> CGRect {
return self.superview!.convert(self.frame, to: parentView)
}