Swift 4 个存储在用户默认值中的键值字典
Swift 4 Key Value Dictionary stored in User Defaults
我是 Swift 的新手,需要存储键值对的数据库。键值对是在应用程序被激活后保留在内存中的数据库中具有对应的 4 位数字的名称。我正在考虑使用以名称为键、以 4 位数字为值的字典。然后使用用户默认值 class 将它们存储在 iPad 闪存中。
下面是我目前开发的代码。添加到数据库的代码编译正常,但由于以下消息(可选类型'[Any]的值?'未展开;您是说使用 '!' 或 '?'?) 这是因为这行代码(if let databaseCheck = database[name])。我显然尝试过解包,但似乎无法摆脱错误消息。
有人知道是什么导致了错误或方法有任何问题吗?
public func checkDatabaseMatch( _ name: String, _ number: String) -> Bool
{
var foundInDatabaseFlag: Bool = false
let database = UserDefaults.standard.array(forKey: "Database")
if let databaseCheck = database[name]
{
if (databaseCheck == number)
{
foundInDatabaseFlag = true
}
}
return foundInDatabaseFlag
}
public func saveToDatabase( _ name: String, _ number: String)
{
var newEntry: [String: String] = [:]
newEntry[name] = number
UserDefaults.standard.set(newEntry, forKey: "Database")
}
有一个重大错误。您保存字典但检索数组。
除了从 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 中使用参数标签以提高可读性。
我是 Swift 的新手,需要存储键值对的数据库。键值对是在应用程序被激活后保留在内存中的数据库中具有对应的 4 位数字的名称。我正在考虑使用以名称为键、以 4 位数字为值的字典。然后使用用户默认值 class 将它们存储在 iPad 闪存中。
下面是我目前开发的代码。添加到数据库的代码编译正常,但由于以下消息(可选类型'[Any]的值?'未展开;您是说使用 '!' 或 '?'?) 这是因为这行代码(if let databaseCheck = database[name])。我显然尝试过解包,但似乎无法摆脱错误消息。
有人知道是什么导致了错误或方法有任何问题吗?
public func checkDatabaseMatch( _ name: String, _ number: String) -> Bool
{
var foundInDatabaseFlag: Bool = false
let database = UserDefaults.standard.array(forKey: "Database")
if let databaseCheck = database[name]
{
if (databaseCheck == number)
{
foundInDatabaseFlag = true
}
}
return foundInDatabaseFlag
}
public func saveToDatabase( _ name: String, _ number: String)
{
var newEntry: [String: String] = [:]
newEntry[name] = number
UserDefaults.standard.set(newEntry, forKey: "Database")
}
有一个重大错误。您保存字典但检索数组。
除了从 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 中使用参数标签以提高可读性。