     /// Returns the value associated with the specified key.
     ///
     /// - Parameter key: The key.
-    /// - Returns: The specified key type T or nil if not found.
+    /// - Returns: A `ValueType` or nil if the key was not found.
     public func get<ValueType>(for key: Key<ValueType>) -> ValueType? {
         if isPrimitive(type: ValueType.self) {
             return self.userDefaults.value(forKey: key._key) as? ValueType

        }
    }
    
    /// Checks if a give type is primitive
    ///
    /// - Parameter type: The type
    /// - Returns: A boolean value indicating if the type is primitive
    private func isPrimitive<ValueType>(type: ValueType.Type) -> Bool {
        switch type {
        case is String.Type, is Bool.Type, is Int.Type, is Float.Type, is Double.Type:

/// Represents a `Key` with an associated generic value type conforming to the
/// `Codable` protocol.
///
///     static let someKey = Key<ValueType>("someKey")
public final class Key<ValueType: Codable> {
    fileprivate let _key: String
    public init(_ key: String) {
