Skip to content

Instantly share code, notes, and snippets.

@Revolucent
Revolucent / RxReSwift.swift
Created September 24, 2018 07:23
Observe ReSwift subscriptions using RxSwift
import Foundation
import ReSwift
import RxSwift
private class StoreObserver<SelectedState>: StoreSubscriber {
private let onNext: (SelectedState) -> Void
init(onNext: @escaping (SelectedState) -> Void) {
self.onNext = onNext
}
func newState(state: SelectedState) {
@Revolucent
Revolucent / ThrowIfNil.swift
Created July 7, 2018 01:32
Throw if nil, otherwise return value
infix operator ??!: NilCoalescingPrecedence
/**
If the left-hand side in nil, the error on the right-hand side is thrown. Otherwise,
the unwrapped value is returned. For example:
```
// Instead of this…
guard let x = y else {
@Revolucent
Revolucent / Semicircle.swift
Created May 20, 2018 18:11
Draw Semircle Between Any Two Arbirtary CGPoints
extension CGContext {
// via https://stackoverflow.com/a/50419334/27779
func drawSemicircle(from: CGPoint, to: CGPoint, clockwise: Bool) {
let center = CGPoint(x: 0.5 * (from.x + to.x), y: 0.5 * (from.y + to.y))
let radius = 0.5 * hypot(to.x - from.x, to.y - from.y)
let startAngle = atan2(to.y - from.y, to.x - from.x)
let endAngle = startAngle + .pi
move(to: from)
addArc(center: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
@Revolucent
Revolucent / Median.pgsql
Created December 2, 2017 15:57
Calculate a median
-- https://wiki.postgresql.org/wiki/Aggregate_Median
CREATE OR REPLACE FUNCTION _final_median(NUMERIC[])
RETURNS NUMERIC AS
$$
SELECT AVG(val)
FROM (
SELECT val
FROM unnest($1) val
ORDER BY 1
LIMIT 2 - MOD(array_upper($1, 1), 2)
@Revolucent
Revolucent / xcode
Created August 13, 2017 06:51
Launch project in current directory with selected Xcode
#!/bin/bash
XCODE='Xcode';
XCODEPATH="$(xcode-select -p)";
if [[ $XCODEPATH =~ /([^/]+)\.app ]]; then
XCODE="${BASH_REMATCH[1]}"
fi;
open -a "$XCODE" "${1:-.}";
@Revolucent
Revolucent / copyright
Last active April 10, 2016 03:59
Insert copyright headers
@Revolucent
Revolucent / UIColorExtensions.swift
Last active July 18, 2017 02:45
Convert a six-digit hex literal into a color
extension UIColor {
convenience init(hex: UInt, alpha: CGFloat = 1.0) {
let red = CGFloat((hex & 0xFF0000) >> 0x10) / 255.0
let green = CGFloat((hex & 0x00FF00) >> 0x8) / 255.0
let blue = CGFloat(hex & 0x0000FF) / 255.0
self.init(red: red, green: green, blue: blue, alpha: alpha)
}
}
@Revolucent
Revolucent / DependencyResolver.swift
Last active July 9, 2019 22:49
DependencyResolver - a simple, elegant, flexible dependency resolver for Swift 2.x
//
// DependencyResolver.swift
//
// Created by Gregory Higley on 2/15/16.
// Copyright © 2016 Revolucent LLC.
//
// This file is released under the MIT license.
// https://gist.github.com/Revolucent/25daa75bda879dd20bb2
//
@Revolucent
Revolucent / Resolver.swift
Created January 8, 2016 07:27
Poor Man's Dependency Resolver for Swift
enum CreationPolicy {
case Single
case Shared
}
class Resolver {
private struct Instance {
private let policy: CreationPolicy
private let create: () -> Any
private var instance: Any?
@Revolucent
Revolucent / git-only
Last active August 29, 2015 14:21
git-only
#!/bin/bash
# Git Only: Perform a Git operation only when in a whitelisted directory.
#
# This is really only useful when combined with git-gat. For instance, let's
# say we want to create a branch in two of our side-by-side repos, we can say:
#
# git gat only Repo1 Repo2 -- checkout -b feature1
#
# This will create and checkout a branch called feature1, but only in Repo1 and Repo2.