SPB Git

spb/os-vault Public

Self-custody, multi-chain crypto wallet for macOS. One recovery phrase, six chain families, zero API keys — nothing leaves your Mac.

Swift 96% Shell 3.4% Makefile 0.6%
1.4 KB · 64 lines swift
Raw Blame History
1import Foundation23final actor Cache<Key: Hashable, Value> {4    private let wrapped = NSCache<WrappedKey, Entry>()56    func insert(_ value: Value, forKey key: Key) {7        let entry = Entry(value: value)8        wrapped.setObject(entry, forKey: WrappedKey(key))9    }1011    func value(forKey key: Key) -> Value? {12        let entry = wrapped.object(forKey: WrappedKey(key))13        return entry?.value14    }1516    func removeValue(forKey key: Key) {17        wrapped.removeObject(forKey: WrappedKey(key))18    }19}2021private extension Cache {22    final class WrappedKey: NSObject {23        let key: Key2425        init(_ key: Key) { self.key = key }2627        override var hash: Int { key.hashValue }2829        override func isEqual(_ object: Any?) -> Bool {30            guard let value = object as? WrappedKey else {31                return false32            }3334            return value.key == key35        }36    }37}3839private extension Cache {40    final class Entry {41        let value: Value4243        init(value: Value) {44            self.value = value45        }46    }47}4849extension Cache {50    subscript(key: Key) -> Value? {51        get { value(forKey: key) }52        set {53            guard let value = newValue else {54                // If nil was assigned using our subscript,55                // then we remove any value for that key:56                removeValue(forKey: key)57                return58            }5960            insert(value, forKey: key)61        }62    }63}64