Skip to content

Instantly share code, notes, and snippets.

View malhal's full-sized avatar

Malcolm Hall malhal

View GitHub Profile
@malhal
malhal / CLLocationManager+Combine.swift
Last active May 31, 2024 23:28
A Combine location publisher for CLLocationManager.
// Requirements: a NSLocationWhenInUseUsageDescription entry in Info.plist
// Usage: @State var locator = CLLocationManager.publishLocation()
// and
// .onReceive(locator) { location in
// Improvements needed: Move requestWhenInUseAuthorization into its own publisher and perhaps have a combineLatest pipeline for both authorized and valid location.
// A configuration param to init(), e.g. so each manager can have the same distanceFilter.
import Foundation
import Combine
import CoreLocation
//
// ResourceCacheTest.swift
// Test (iOS)
//
// Created by Malcolm Hall on 08/05/2024.
//
import SwiftUI
import AsyncAlgorithms
import SwiftUI
// AsyncObservableTest.ContentView() in your app struct
struct AsyncObservableTest {
@Observable
class Content {
var counter = 0
}
@malhal
malhal / ContentView.swift
Created July 5, 2024 10:04
Alert not continuously showing on iOS 18b2
import SwiftUI
struct ContentView: View {
struct AlertConfig: AlertPresentable {
var isPresented: Bool = false {
didSet {
if !isPresented {
dismissAction?()
dismissAction = nil
}
@malhal
malhal / sort.swift
Created October 26, 2024 18:42
Cached sort
import SwiftUI
struct Counter: Identifiable, Equatable {
let id = UUID()
var count = 0
}
struct ContentView: View {
@State var counters: [Counter] = [.init(), .init(), .init()]
@malhal
malhal / sort2.swift
Created October 27, 2024 12:01
cached sort 2
import SwiftUI
struct Counter: Identifiable, Equatable {
let id = UUID()
var count = 0
}
struct SortedCounters {
var _counters: [Binding<Counter>] = []
var counters: [Binding<Counter>] {
@malhal
malhal / sort3.swift
Last active October 28, 2024 20:36
Cached sort
import SwiftUI
@Observable
class Counter: Identifiable {
var count = 0
}
@Observable
class Model {
var counters: [Counter] = [.init(), .init(), .init()]