Skip to content

Instantly share code, notes, and snippets.

View bsrz's full-sized avatar

Ben Sarrazin bsrz

View GitHub Profile
@IanKeen
IanKeen / AnalyticsReducer.swift
Created January 16, 2024 04:27
TCA: Example of creating an Analytics component to get before/after state
public protocol AnalyticsReducer {
associatedtype State
associatedtype Action
func analytics(before: State, after: State, action: Action) -> Effect<Action>
}
public struct _AnalyticsReducer<Base: Reducer, Analytics: AnalyticsReducer>: Reducer where Analytics.State == Base.State, Analytics.Action == Base.Action {
@usableFromInline
let base: Base
@swiftui-lab
swiftui-lab / showSizes.swift
Last active October 27, 2024 07:11
A debugging modifier for SwiftUI views (showSizes)
// Author: SwiftUI-Lab (swiftui-lab.com)
// Description: Implementation of the showSizes() debugging modifier
// blog article: https://swiftui-lab.com/layout-protocol-part-2
import SwiftUI
struct MeasureExample: View {
var body: some View {
VStack {
@wakinchan
wakinchan / generate-target-dependencies.sh
Last active July 13, 2025 14:04
Generate Target Dependencies for Package.swift
#!/usr/bin/env sh
# usage: sh ./generate-target-dependencies.sh | dot -Tsvg -o target-graph.svg
packages=`swift package describe --type json`
targets=`echo $packages | jq '.targets'`
target_names=`echo $targets | jq -r '.[] | .name'`
body=""
template=`cat <<EOF
digraph DependenciesGraph {
@IanKeen
IanKeen / Publisher+Result.swift
Created July 14, 2020 17:18
Extension to convert a failable Publisher into a non-failable Result based publisher (as well as extensions to break out values/errors) - Same idea as RxSwifts Materialize
extension Publisher {
func asResult() -> AnyPublisher<Result<Output, Failure>, Never> {
return map(Result.success)
.catch { Just(Result.failure($0)) }
.eraseToAnyPublisher()
}
}
extension Publisher {
func values<S, F: Error>() -> AnyPublisher<S, Never> where Output == Result<S, F>, Failure == Never {
@IanKeen
IanKeen / Delegate.swift
Created June 27, 2020 20:24
PropertyWrapper: Delegate updates similar to SwiftUIs ObservableObject/Published combo
public protocol DelegateProvider: AnyObject {
static func notifyDelegate(_ instance: Self)
}
@propertyWrapper
public struct Delegate<Value> {
public var wrappedValue: Value
public init(wrappedValue: Value) {
self.wrappedValue = wrappedValue
@IanKeen
IanKeen / EntryPoint.swift
Last active March 13, 2025 00:22
Example main.swift
import Foundation
import SwiftUI
let isUITesting = /* your UI test detection here */
@main
struct EntryPoint {
static func main() {
if isUITesting {
UITestApp.main()
@mattt
mattt / UIViewControllerPreview.swift
Last active December 3, 2024 07:42
Generic structures to host previews of UIView and UIViewController subclasses.
import UIKit
#if canImport(SwiftUI) && DEBUG
import SwiftUI
struct UIViewControllerPreview<ViewController: UIViewController>: UIViewControllerRepresentable {
let viewController: ViewController
init(_ builder: @escaping () -> ViewController) {
viewController = builder()
}
@shnhrrsn
shnhrrsn / String+Hashing.swift
Created September 30, 2019 23:55
Swift CryptoKit MD5/SHA1 Hash
import Foundation
import CryptoKit
private protocol ByteCountable {
static var byteCount: Int { get }
}
extension Insecure.MD5: ByteCountable { }
extension Insecure.SHA1: ByteCountable { }
@freak4pc
freak4pc / Combine+WithLatestFrom.swift
Last active November 25, 2024 05:58
withLatestFrom for Apple's Combine
//
// Combine+WithLatestFrom.swift
//
// Created by Shai Mishali on 29/08/2019.
// Copyright © 2019 Shai Mishali. All rights reserved.
//
import Combine
// MARK: - Operator methods