Skip to content

Instantly share code, notes, and snippets.

View darrarski's full-sized avatar
:octocat:
🍏🦕

Dariusz Rybicki darrarski

:octocat:
🍏🦕
View GitHub Profile
@darrarski
darrarski / TimeZones.js
Last active April 16, 2022 12:54 — forked from fcrespo82/TimeZones.js
Scriptable time zones widget
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: cyan; icon-glyph: clock;
// list of time zones: https://gist.github.com/rxaviers/8481876
let configs = [
{name: "Warsaw", timzeZone: "Europe/Berlin", bgColor: new Color("BF0D3E",1)},
{name: "Recife", timeZone: "America/Recife", bgColor: new Color("009639",1)},
{name: "Los Angeles", timeZone: "America/Los_Angeles", bgColor: new Color("3878d1",1)}
]
extension View {
@ViewBuilder func modify<Modified: View>(
if condition: @autoclosure () -> Bool,
then transform: (Self) -> Modified
) -> some View {
if condition() {
transform(self)
} else {
self
}
import Foundation
public protocol JSONEncodable: Encodable {
static var keyEncodingStrategy: JSONEncoder.KeyEncodingStrategy { get }
static var dateEncodingStrategy: JSONEncoder.DateEncodingStrategy { get }
static var dataEncodingStrategy: JSONEncoder.DataEncodingStrategy { get }
static var nonConformingFloatEncodingStrategy: JSONEncoder.NonConformingFloatEncodingStrategy { get }
func toJSON() throws -> Data
}
@darrarski
darrarski / CustomPublisher.swift
Last active February 15, 2020 08:08
CustomPublisher - customizable publisher for Combine framework
import Combine
public final class CustomPublisher<Output, Failure>: Publisher where Failure: Error {
public init(subscribe subscribeClosure: @escaping (AnySubscriber<Output, Failure>) -> Subscription) {
self.subscribeClosure = subscribeClosure
}
public func receive<S>(subscriber: S) where S: Combine.Subscriber, S.Input == Output, S.Failure == Failure {
let subscription = subscribeClosure(AnySubscriber(subscriber))
@darrarski
darrarski / SimplePublisher.swift
Last active November 22, 2021 23:34
SimplePublisher - custom publisher for Combine framework
import Combine
public final class SimplePublisher<Output, Failure>: Publisher where Failure: Error {
public init(_ closure: @escaping (Receiver<Output, Failure>) -> Disposable) {
self.closure = closure
}
public func receive<S>(subscriber: S) where S: Subscriber, S.Input == Output, S.Failure == Failure {
subscriber.receive(subscription: Subscription(subscriber: subscriber, closure: closure))
}
@darrarski
darrarski / FormattedTextField.swift
Last active April 16, 2024 13:14
SwiftUI FormattedTextField - TextField with custom display/edit formatters
import SwiftUI
public struct FormattedTextField<Formatter: TextFieldFormatter>: View {
public init(_ title: String,
value: Binding<Formatter.Value>,
formatter: Formatter) {
self.title = title
self.value = value
self.formatter = formatter
}
@darrarski
darrarski / NumberField.swift
Last active October 18, 2023 18:10
SwiftUI NumberField - TextField with custom display/edit number formatters
import SwiftUI
public struct NumberField: View {
public init(_ title: String,
value: Binding<NSNumber?>,
decorator: @escaping (String) -> String = { $0 }) {
self.title = title
self.value = value
let formatter = NumberFormatter()
@darrarski
darrarski / FetchedResultsPublisher.swift
Last active November 9, 2023 08:31
Swift-Combine-CoreData-Fetched-Results-Publisher
import Combine
import CoreData
public final class FetchedResultsPublisher
<ResultType>
: Publisher
where
ResultType: NSFetchRequestResult
{
@darrarski
darrarski / Publisher+Materialize.swift
Created September 9, 2019 07:35
Simple extension to materialize Combine publishers (helpful when unit testing)
import Combine
extension Publisher {
func materialize() -> Result<[Output], Failure> {
var values = [Output]()
var result: Result<[Output], Failure>!
let semaphore = DispatchSemaphore(value: 0)
let subscription = sink(receiveCompletion: { completion in
switch completion {
@darrarski
darrarski / IfLet.swift
Last active January 7, 2021 13:15
SwiftUI IfLet helper functions
import SwiftUI
func IfLet<T, ThenOut: View>(
_ value: T?,
then: (T) -> ThenOut
) -> some View {
ViewBuilder.buildIf(value.map { then($0) })
}
func IfLet<T, ThenOut: View, ElseOut: View>(