Skip to content

Instantly share code, notes, and snippets.

@klundberg
klundberg / Binding+initially.swift
Created June 28, 2023 06:41
A mutable variant of Binding.constant to help with swiftui previews
extension Binding {
/// like Binding.constant but lets you update the value and stores that updated value via a captured enclosing reference.
public static func initially(_ value: Value) -> Binding<Value> {
let box = Box(value)
return .init(
get: { box.value },
set: { box.value = $0 }
)
}
@klundberg
klundberg / machine.js
Created November 14, 2019 23:26
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
@klundberg
klundberg / optional-collection.swift
Last active February 24, 2018 23:13
Potential Swift 4.1 implementation of conditional conformace to Collection for Optional<Collection>
public struct OptionalIndex<InnerIndex: Comparable> {
let inner: InnerIndex?
init(_ base: InnerIndex) {
inner = base
}
init() {
inner = nil
}
@klundberg
klundberg / optional-conditional-collection.swift
Created February 21, 2018 06:39
Conditional conformance in swift 4.1 for optional for some common protocols
extension Optional: Collection where Wrapped: Collection {
public typealias Element = Wrapped.Element
public typealias Index = Wrapped.Index
public func index(after i: Wrapped.Index) -> Wrapped.Index {
switch self {
case let value?:
return value.index(after: i)
case nil:
fatalError() // TODO: ???
041f94dcd6f7e66679da2ead9c76e5aaa24f0d17ec559ab354806133340f877095226f2d4bc36a07c4cf1f1e9269bb3bb55970234a0af292c869446ce0f6e8e886;nsirlconnection
@klundberg
klundberg / json-codable.swift
Last active September 2, 2021 22:35
encode/decode arbitrary JSON data with swift 4's Codable
enum JSONValue: Codable, Equatable {
struct JSONValueDecodingError: Error {
let message: String
}
case boolean(Bool)
case number(Double)
case string(String)
case array([JSONValue?])
case object([String: JSONValue?])
@klundberg
klundberg / SnakeCaseCodingKeys.stencil
Created September 16, 2017 02:28
Sourcery template that adds CodingKeys overrides for Codable types to convert camelCase property names to snake_case in the serialized format.
{% for type in types.based.Codable|!enum %}
public extension {{ type.name }} {
enum CodingKeys: String, CodingKey {
{% for variable in type.variables|instance %}
{% if variable|annotated:"keyOverride" %}
case {{ variable.name }} = "{{ variable.annotations.keyOverride }}"
{% else %}
case {{ variable.name }} = "{{ variable.name|camelToSnakeCase }}"
{% endif %}
{% endfor %}
@klundberg
klundberg / build.log
Created June 13, 2017 02:20
FutureKit build errors with Xcode 9
/usr/bin/xcrun xcodebuild -workspace /Users/klundberg/workspaces/wayfair-ios/Carthage/Checkouts/FutureKit/FutureKit.xcworkspace -scheme FutureKit\ iOS -configuration Release -derivedDataPath /Users/klundberg/Library/Caches/org.carthage.CarthageKit/DerivedData/FutureKit/3.0.0 -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES clean buildUser defaults from command line:
IDEDerivedDataPathOverride = /Users/klundberg/Library/Caches/org.carthage.CarthageKit/DerivedData/FutureKit/3.0.0
Build settings from command line:
BITCODE_GENERATION_MODE = bitcode
CARTHAGE = YES
CODE_SIGN_IDENTITY =
CODE_SIGNING_REQUIRED = NO
ONLY_ACTIVE_ARCH = NO
SDKROOT = iphoneos11.0
@klundberg
klundberg / copyonwrite.swift
Last active April 1, 2017 23:27
Encapsulating copy-on-write behavior in a reusable way.
// Written using Swift 3.0.x
fileprivate final class Box<T> {
let unbox: T
init(_ value: T) {
unbox = value
}
}
public struct CopyOnWrite<T: AnyObject> {

Keybase proof

I hereby claim:

  • I am klundberg on github.
  • I am kevlario (https://keybase.io/kevlario) on keybase.
  • I have a public key ASAXKidIohQbWt66-UXKy-Ek8vejycrMu6F4xoG3oojvTQo

To claim this, I am signing this object: