Skip to content

Instantly share code, notes, and snippets.

View nsoojin's full-sized avatar
:octocat:
making stuff

Soojin Ro nsoojin

:octocat:
making stuff
View GitHub Profile
@nsoojin
nsoojin / ClampedString.swift
Created October 26, 2019 08:56
ClampedString Property Wrapper
@propertyWrapper
struct ClampedString {
let max: Int
var value: String
init(wrappedValue: String, max: Int) {
value = wrappedValue
self.max = max
}
@nsoojin
nsoojin / LateInitialized.swift
Last active October 26, 2019 09:46
LateInitialized Property Wrapper
@propertyWrapper
struct LateInitialized<T> {
var storage: T? = nil
var wrappedValue: T {
get {
guard let value = storage else {
fatalError("value has not been set!")
}
return value
@nsoojin
nsoojin / SharedDefaults.swift
Last active October 26, 2019 09:05
SharedDefaults Property Wrapper
@propertyWrapper
struct SharedDefault<T> {
let key: String
let defaultValue: T
var wrappedValue: T {
get {
UserDefaults.securityCard.object(forKey: key) as? T ?? defaultValue
}
set {
@nsoojin
nsoojin / SharedKeychain.swift
Created October 26, 2019 08:55
SharedKeychain Property Wrapper
@propertyWrapper
struct SharedKeychain {
let key: String
var wrappedValue: String? {
get {
return Global.sharedKeychain[string: key]
}
set {
if let value = newValue {