Skip to content

Instantly share code, notes, and snippets.

@audrl1010
Created May 19, 2020 16:52
Show Gist options
  • Save audrl1010/c4f1135374c1ba9a56c849081e1f0bc6 to your computer and use it in GitHub Desktop.
Save audrl1010/c4f1135374c1ba9a56c849081e1f0bc6 to your computer and use it in GitHub Desktop.
utils

// MARK: - Merge extension Array where Element: Equatable {

func merge(target: [Element]) -> [Element] {
    let result = target.filter { item -> Bool in
        return self.contains(where: { item == $0}) == false
    }
    return self + result
}

}

@propertyWrapper public struct UserDefault { let key: String let defaultValue: T public var wrappedValue: T { get { return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue }

    set {
        UserDefaults.standard.set(newValue, forKey: key)
    }
}

}

struct Store<T: Codable> { static func value(key: String) -> T? { let jsonString = UserDefaults.standard.string(forKey: key) return jsonString?.decode() } static func set(key: String, value: T?) { UserDefaults.standard.set(value?.jsonString, forKey: key) UserDefaults.standard.synchronize() } }

@propertyWrapper struct JsonSeriablizable<T: Codable> { private let key: String init(_ key: String) { self.key = key } var wrappedValue: T? { get { return Store.value(key: key) } set { Store.set(key: key, value: newValue) } } }

@propertyWrapper struct UserDefault { let key: String let defaultValue: T

var wrappedValue: T {
    get {
        return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
    }
    set {
        UserDefaults.standard.set(newValue, forKey: key)
    }
}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment