Skip to content

Instantly share code, notes, and snippets.

NachoSoto NachoSoto

  • San Francisco, California
Block or report user

Report or block NachoSoto

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
NachoSoto / UIAccessibilityTraits+Extensions.swift
Last active Mar 19, 2019
Extensions to simplify usage of accessibilityTraits in Swift 4.2:
View UIAccessibilityTraits+Extensions.swift
// Extensions to simplify usage of accessibilityTraits in Swift 4.2:
public func |= (traits: inout UIAccessibilityTraits, other: [UIAccessibilityTraits]) {
for o in other {
traits |= o
public func |= (traits: inout UIAccessibilityTraits, other: UIAccessibilityTraits) {
// From:
NachoSoto / UniqueElements.swift
Created Dec 27, 2017
Example of how to extract unique elements from a sequence in Swift
View UniqueElements.swift
import Foundation
extension Sequence {
// Extension on Sequence allows us to use this method on Arrays, Maps, Sets, etc.
func uniqueElements<Index: Hashable>(for indexer: (Element) -> Index) -> [Element] {
// Keep track of what we've already seen in a Set,
// which allows us to query for elements efficiently.
var seenElements: Set<Index> = []
var result: [Element] = []
View FullWidthSelfSizingCollectionView.swift
import UIKit
import Cartography //
This is an example of self sizing `UICollectionView` cells using AutoLayout,
where the width of cells is always the width of the parent, to mimic `UITableView`.
fileprivate let items: [String] = (0..<100)
.map { _ in Lorem.sentences(Int.random(min: 1, max: 8)) } // Using
View swift-3.1-regression
Test Suite 'All tests' started at 2017-03-28 11:27:46.053
Test Suite 'Quick.framework' started at 2017-03-28 11:27:46.055
Test Suite 'Quick.framework' passed at 2017-03-28 11:27:46.055.
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test Suite 'APITests.xctest' started at 2017-03-28 11:27:46.056
Test Suite 'WebURLParserSpec' started at 2017-03-28 11:27:46.057
Test Case '-[APITests.WebURLParserSpec Card_graph_URLs__parses_url_with_all_data]' started.
==32504==ERROR: AddressSanitizer: heap-use-after-free on address 0x60600028a8b0 at pc 0x0001207f1970 bp 0x7fff529ebf30 sp 0x7fff529ebf28
WRITE of size 8 at 0x60600028a8b0 thread T0
NachoSoto / signal-collect
Created Feb 22, 2016
Converting [SignalProducer<U>] -> SignalProducer<[U]>
View signal-collect
// @NachoSoto is there a way to take a # of SignalProducer<U,E> and turn them in to SignalProducer<[U], E>? Like combineLatest but w/o tuples
let signals: [SignalProducer<T, E>]
let result: SignalProducer<[T], E> =
SignalProducer(values: signals) // create a producer that emits all signals.
.flatten(.Merge) // merge all values that they emit.
.collect() // collect all values into an array.
View Signal+Extensions.swift
// Signal+Extensions.swift
// Khan Academy
// Created by Nacho Soto on 10/1/15.
// Copyright © 2015 Khan Academy. All rights reserved.
import ReactiveCocoa
NachoSoto / AnyValidator.swift
Last active Dec 3, 2015
Type-erased ValidatorType
View AnyValidator.swift
protocol ValidatorType {
typealias ValidatedType
func isValid(object: ValidatedType) -> Bool
// You might want to make it a reference type, depending on your case.
struct AnyValidator<T>: ValidatorType {
private let validatorBlock: (T) -> Bool
init<V: ValidatorType where V.ValidatedType == T>(validator: V) {
View tvos.bash
# Using as example:

xcodebuild -sdk appletvsimulator -project Decodable.xcodeproj -configuration Release -scheme Decodable-tvOS ONLY_ACTIVE_ARCH=NO clean build
# This fails with
View memory_crash.swift
var testArray: [Int] = []
func modify(action: [Int] -> [Int]) {
testArray = action(testArray)
for _ in 0..<50 {
modify { array in
var array = array
View switch-bool.swift
func f(a: Bool, b: Bool) {
switch (a, b) {
case (false, false):
case (false, true):
case (true, false):
case (true, true):
You can’t perform that action at this time.