Есть большая ошибка. Вы сохраняете словарь, но получаете массив.
Кроме того, словарь, извлеченный из UserDefaults
, по умолчанию равен [String:Any]
, вы должны условно понижать объект.
Код проверяет, есть ли словарь в UserDefaults
и есть ли запрошенный ключ в одном выражении
public func checkDatabaseMatch( _ name: String, _ number: String) -> Bool
{
guard let database = UserDefaults.standard.dictionary(forKey: "Database") as? [String:String],
let databaseCheck = database[name] else { return false }
return databaseCheck == number
}
Другая ошибка в том, что вы всегда перезаписываете весь словарь в UserDefaults
. Если вы хотите сохранить несколько пар ключ-значение, сначала прочитайте словарь.
public func saveToDatabase( _ name: String, _ number: String)
{
var newEntry : [String: String]
if let database = UserDefaults.standard.dictionary(forKey: "Database") as? [String:String] {
newEntry = database
} else {
newEntry = [:]
}
newEntry[name] = number
UserDefaults.standard.set(newEntry, forKey: "Database")
}
Примечание: для удобства чтения настоятельно рекомендуется использовать метки параметров в Swift.