Skip to content

Instantly share code, notes, and snippets.

@vhart
vhart / TEParserProtocol3.swift
Last active August 28, 2017 19:08
Without JsonDeserializer as a generic constraint
class SomeDeserializer<T>: JsonDeserializer {
private let deserializer: JsonDeserializer
init<D: JsonDeserializer>(deserializer: D) where D.Response == T {
self.deserializer = deserializer
}
func parse(json: [String : Any]) -> T {
return deserializer.parse(json: json)
}
class SomeDeserializer<T, D: JsonDeserializer>: JsonDeserializer {
private let deserializer: D
init<D: JsonDeserializer>(deserializer: D) where D.Response == T {
self.deserializer = deserializer
}
func parse(json: [String : Any]) -> T {
return deserializer.parse(json: json)
}
class BaseJsonDeserializer<T>: JsonDeserializer {
init() {
guard type(of: self) != BaseJsonDeserializer.self
else { fatalError("do not initialize this abstract class directly") }
}
func parse(json: [String : Any]) -> T {
fatalError("Abstract class. Subclass must override")
}
}
@vhart
vhart / TEParsingProtocol_Final.swift
Created August 28, 2017 21:25
Full Type Erased Scenario
public enum Result<T, E: Error> {
case success(T)
case failure(E)
}
public enum NetworkError: Error {
case invalidJson
case badRequest
case timeout
}
@vhart
vhart / IdentifiableDispatchQueue.swift
Last active December 4, 2017 22:56
IdentifiableDispatchQueue (Swift 3)
class IdentifiableDispatchQueue {
let key = DispatchSpecificKey<UUID>()
let id = UUID()
let queue: DispatchQueue
convenience init(label: String) {
let queue = DispatchQueue(label: label)
self.init(queue: queue)
@vhart
vhart / MultiTouchViewAction.kt
Created January 12, 2018 17:23
Multi Touch View Action For Espresso
import android.support.test.espresso.ViewAction
import android.support.test.espresso.ViewInteraction
import android.support.test.espresso.action.CoordinatesProvider
import android.support.test.espresso.UiController
import android.view.InputDevice
import android.view.MotionEvent
import android.os.SystemClock
class MultiTouchDownEvent : ViewAction {
@vhart
vhart / Swift4-ReadWriteDelete.swift
Last active November 8, 2022 16:15
File Handling from an Xcode Playground
//: Playground - noun: a place where people can play
import UIKit
import PlaygroundSupport
func setUpDemo() {
let testContents = """
This is a test
Emojis follow:
🚀
@vhart
vhart / Self-Sizing-TableView-Cells-pt1.swift
Last active April 11, 2018 22:40
Self sizing chat cells
import UIKit
class ChatCell: UITableViewCell {
lazy var iconImageView: UIImageView = {
let imageView = UIImageView()
let icon = UIImage(named: "icons8-Sheep on Bike")
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = .clear
imageView.layer.cornerRadius = 25
imageView.contentMode = .scaleAspectFit
import UIKit
class PermaColorView: UIView {
var color: UIColor = .clear {
didSet {
backgroundColor = color
}
}
override var backgroundColor: UIColor? {
@vhart
vhart / Filter.swift
Created June 7, 2018 18:49
Writing Filters Using KeyPaths
struct Filter<Object> {
let path: PartialKeyPath<Object>
let matcher: (Any) -> Bool
init<Type>(keyPath: KeyPath<Object, Type>, matcher: @escaping (Type) -> Bool) {
self.path = keyPath
self.matcher = { value in
guard let typedValue = value as? Type else { return false }
return matcher(typedValue)