Skip to content

Instantly share code, notes, and snippets.

View daltonclaybrook's full-sized avatar

Dalton Claybrook daltonclaybrook

View GitHub Profile
//MARK: Strategy protocol
protocol StrategyAny {
func performAny(input: Any) -> Any?
}
extension StrategyAny where Self: Strategy {
func performAny(input: Any) -> Any? {
if let input = input as? Input {
return perform(input: input)
import UIKit
class LoadingView: UIView {
var spinnerContainer: UIView!
var spinner: UIActivityIndicatorView!
//MARK: Initializers
override init(frame: CGRect) {
struct WeakArray<Element: AnyObject> {
fileprivate var backing: [Weakable<Element>]
init(_ array: [Element]) {
backing = array.map { Weakable($0) }
}
mutating func cleanup() {
backing = backing.flatMap { $0.element != nil ? $0 : nil }
}
import Foundation
class Node {
let x: Int
let y: Int
var isBlocked = false
// WeakArray.swift is in its own gist
var neighbors = WeakArray<Node>()
var unblockedNeighbors: [Node] {
return neighbors.filter { !$0.isBlocked }
@daltonclaybrook
daltonclaybrook / Collection+FilterSplit.swift
Last active May 2, 2017 15:16
Function on Collection which is effectively "filter," but instead of returning one Array, returns two Arrays (pass and fail).
extension Collection {
func filterSplit(predicate: (Iterator.Element) -> Bool) -> (pass: [Iterator.Element], fail: [Iterator.Element]) {
var pass = Array<Iterator.Element>()
var fail = Array<Iterator.Element>()
for element in self {
if predicate(element) {
pass.append(element)
} else {
fail.append(element)
}
let names = [
"3 Green Dogs",
"Absorption Corp",
"Addiction",
"ADM Alliance Nutrition",
"B & R Plastics",
"Cat Dancer"
]
let results = names.reduce([String:[String]]()) { (dictionary, name) in
class AuthRetryToken {
private(set) var retriesLeft = 3
var canRetry: Bool {
return retriesLeft > 0
}
func handleRetry() {
guard canRetry else { return }
retriesLeft -= 1
}
protocol Optionalable {
associatedtype WrappedType
var wrapped: WrappedType? { get }
}
extension Optional: Optionalable {
typealias WrappedType = Wrapped
var wrapped: Wrapped? {
return self
}
import Foundation
#if os(Linux)
class XMLBaseClass {}
#else
// On macOS, XMLParserDelegate inherits from NSObjectProtocol
typealias XMLBaseClass = NSObject
#endif
class AdsParser: XMLBaseClass, XMLParserDelegate {
import Dispatch
import Foundation
import HTTP
extension Responder {
/// Perform several network requets concurrently
///
/// - Parameters:
/// - requests: An array of Requests to be performed