     }
 }
 
-public final class DefaultsBoolBridge: DefaultsBridge<Bool> {
-    public override func save(key: String, value: Bool?, userDefaults: UserDefaults) {
-        userDefaults.set(value, forKey: key)
-    }
-
-    public override func get(key: String, userDefaults: UserDefaults) -> Bool? {
+open class DefaultsBoolBridge: DefaultsBridge<Bool> {
+    open override func save(key: String, value: Bool?, userDefaults: UserDefaults) {
+        userDefaults.set(value, forKey: key)
+    }
+
+    open override func get(key: String, userDefaults: UserDefaults) -> Bool? {
         // @warning we use number(forKey:) instead of bool(forKey:), because
         // bool(forKey:) will always return value, even if it's not set
         //

    }
}

public final class DefaultsCodableBridge<T: Codable>: DefaultsBridge<T> {

    public override func save(key: String, value: T?, userDefaults: UserDefaults) {
        guard let value = value else {
            userDefaults.removeObject(forKey: key)
            return

    }
}

open class DefaultsObjectBridge<T>: DefaultsBridge<T> {
    open override func save(key: String, value: T?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    open override func get(key: String, userDefaults: UserDefaults) -> T? {
        return userDefaults.object(forKey: key) as? T
    }
}

open class DefaultsArrayBridge<T: Collection>: DefaultsBridge<T> {
    open override func save(key: String, value: T?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    open override func get(key: String, userDefaults: UserDefaults) -> T? {
        return userDefaults.array(forKey: key) as? T
    }
}

open class DefaultsStringBridge: DefaultsBridge<String> {
    open override func save(key: String, value: String?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    open override func get(key: String, userDefaults: UserDefaults) -> String? {
        return userDefaults.string(forKey: key)
    }
}

open class DefaultsIntBridge: DefaultsBridge<Int> {
    open override func save(key: String, value: Int?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    open override func get(key: String, userDefaults: UserDefaults) -> Int? {
        if let int = userDefaults.number(forKey: key)?.intValue {
            return int
        }
