View ReadSpacing.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct ReadSpacing<Content: View>: View { | |
@State private var spacing: CGFloat = 0 | |
@Binding private var outsideSpacing: CGFloat? | |
private let content: (CGFloat) -> Content | |
init(@ViewBuilder content: @escaping (CGFloat) -> Content) { | |
self._outsideSpacing = .constant(nil) | |
self.content = content | |
} | |
init(into spacing: Binding<CGFloat>, @ViewBuilder content: @escaping () -> Content) { |
View Abstraction.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// MARK: - TCAView | |
public protocol TCAView: View where Body == WithViewStore<ScopedState, ScopedAction, Content> { | |
associatedtype ViewState | |
associatedtype ViewAction | |
associatedtype ScopedState | |
associatedtype ScopedAction | |
associatedtype Content |
View Invalidating.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct Invalidation { | |
static let display = Invalidation { $0.setNeedsDisplay() } | |
static let layout = Invalidation { $0.setNeedsLayout() } | |
let action: (UIView) -> Void | |
} | |
@propertyWrapper | |
struct Invalidating<Value> { | |
private let invalidations: [Invalidation] |
View .swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct Parent: View { | |
@State private var foo = "foo" { | |
didSet { print("Parent", foo) } | |
} | |
var body: some View { | |
VStack { | |
Inner(value: foo) | |
Button("Parent Double") { |
View Storage.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@propertyWrapper | |
struct Storage<T: AppStorageConvertible>: RawRepresentable { | |
var rawValue: String { wrappedValue.storedValue } | |
var wrappedValue: T | |
init?(rawValue: String) { | |
guard let value = T.init(rawValue) else { return nil } | |
self.wrappedValue = value | |
} | |
init(wrappedValue: T) { |
View Publisher+WithPrevious.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Publisher { | |
public typealias Pair<T> = (previous: T?, current: T) | |
public func withPrevious() -> AnyPublisher<Pair<Output>, Failure> { | |
return scan(nil) { previous, current -> Pair<Output>? in | |
return Pair(previous: previous?.current, current: current) | |
} | |
.compactMap { $0 } | |
.eraseToAnyPublisher() | |
} |
View SizeClass.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//v1: just find out if sizeclass is regular | |
@propertyWrapper | |
struct SizeClass: DynamicProperty { | |
@Environment(\.horizontalSizeClass) var horizontalSizeClass | |
@Environment(\.verticalSizeClass) var verticalSizeClass | |
var wrappedValue: Bool { | |
horizontalSizeClass == .regular && verticalSizeClass == .regular | |
} | |
} |
View AnyEquatable.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public struct AnyEquatable: Equatable { | |
public let base: Any | |
private let isEqual: (_ other: Any) -> Bool | |
public init<T: Equatable>(_ value: T) { | |
self.base = value | |
self.isEqual = { other in | |
guard let other = other as? T else { return false } | |
return other == value | |
} |
View RetryWhen.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Combine | |
import Foundation | |
public extension Publisher { | |
func retryWhen(max: Int = .max, delay: DispatchQueue.SchedulerTimeType.Stride = 0, _ predicate: @escaping Publishers.RetryWhen<Self>.Predicate) -> Publishers.RetryWhen<Self> { | |
.init(upstream: self, max: max, delay: delay, predicate: predicate) | |
} | |
} | |
extension Publishers { |
View UserDefaultsKey.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct UserDefaultsKey<T: Codable> { | |
var name: String | |
var `default`: T | |
} | |
extension UserDefaults { | |
func get<T>(_ key: UserDefaultsKey<T>) -> T { | |
guard | |
let data = data(forKey: key.name), | |
let box = try? JSONDecoder().decode(Box<T>.self, from: data) |
NewerOlder