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 { | |
var asAsyncThrowingStream: AsyncThrowingStream<Output, any Error> { | |
AsyncThrowingStream { continuation in | |
// Produce item using yield | |
let cancellable = self.sink { completion in | |
switch completion { | |
case .failure(let error): | |
continuation.finish(throwing: error) |
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
/// NSHashTable | |
/// https://developer.apple.com/documentation/foundation/nshashtable | |
/// | |
/// NSMapTable | |
/// https://developer.apple.com/documentation/foundation/nsmaptable | |
/// | |
/// NSHashTable & NSMapTable | |
/// https://nshipster.com/nshashtable-and-nsmaptable/ | |
/// |
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 PlaygroundPage { | |
var dataDirectoryURL: URL? { | |
let directory = playgroundSharedDataDirectory | |
.deletingLastPathComponent() | |
.appendingPathComponent("Shared Playground Data", isDirectory: true) | |
guard !FileManager.default.fileExists(atPath: directory.path(), isDirectory: nil) | |
else { return directory } | |
do { |
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 KeyValue<Key, Value> { | |
let key: Key | |
let value: Value | |
} | |
extension KeyValue: Equatable where Key: Equatable, Value: Equatable {} | |
extension KeyValue: Hashable where Key: Hashable, Value: Hashable {} | |
extension KeyValue: Encodable where Key: Encodable, Value: Encodable {} |
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 | |
protocol ValueDispatching<Output, Failure>: AnyObject { | |
associatedtype Output | |
associatedtype Failure: Error | |
func send(_ value: Output) | |
func send(error: Failure) | |
func completed() | |
} |
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 enum PasswordRule { | |
public enum CharacterClass { | |
case upper | |
case lower | |
case digits | |
case special | |
case asciiPrintable | |
case unicode | |
case custom(Set<Character>) |
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
# https://labbots.com/enabling-touch-id-for-access-on-terminal/ | |
# Edit this file /etc/pam.d/sudo with your favourite editor. | |
sudo vim /etc/pam.d/sudo | |
# Add the following line to the top of the file. | |
auth sufficient pam_tid.so | |
# To enable Touch ID access on Iterm2. You need to do the following. | |
# Go to Prefs -> Advanced -> Allow sessions to survive logging out and back in and set value to no. |
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 | |
var storage = Set<AnyCancellable>() | |
let pub1 = Timer | |
.publish(every: 1, on: .main, in: .default) | |
.autoconnect() | |
let sub = CurrentValueSubject<Int, Never>(0) |
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 URLRequest { | |
func prettyDescription() -> String? { | |
guard | |
let urlString = url?.absoluteString, | |
let methodString = method?.rawValue | |
else { return nil } | |
let headersString = headers.map(\.description).joined(separator: "\n") | |
let bodyString = if let httpBody { | |
String(data: httpBody, encoding: .utf8) ?? "-unknown-body-" |
NewerOlder