         return false
     }
     // MARK: Getting Values
-    public func string(forKey keyName: String) -> String {
+    public func string(forKey keyName: String, defaultValue:String? = "") -> String? {
         let keychainData: Data? = self.getData(forKey: keyName)
         var stringValue: String?
         if let data = keychainData {
             stringValue = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as String?
             if let trimmedString = stringValue {
                 if trimmedString.trimmingCharacters(in: CharacterSet.whitespaces) as String! == "" {
-                    return ""
+                    return defaultValue
                 }
             }
             else {
-                return ""
+                return defaultValue
             }
         }
         else {
-            return ""
+            return defaultValue
         }
         
         return stringValue!

        
        return boolValue!
    }
    public func integer(forKey keyName: String) -> Int? {
        let keychainData: Data? = self.getData(forKey: keyName)
        var intValue: Int?
        if let data = keychainData {
            intValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! Int?
        }
        else {
            return nil
        }
        
        return intValue

    
    // MARK: Setting Values
    @discardableResult
    public func set(string: String, forKey keyName: String) -> Bool {
        if let data = string.data(using: String.Encoding.utf8) {
            return self.setData(value: data, forKey: keyName)
        } else {
            return false
