ios - 存储在用户默认值中的 Swift 4 键值字典

标签 ios swift4 nsdictionary nsuserdefaults

我是 Swift 新手,需要存储一个键值对数据库。键值对是在应用程序被激活后保留在内存中的数据库中具有对应的 4 位数字的名称。我正在考虑使用以名称为键、以 4 位数字为值的字典。然后使用用户默认类将这些存储在 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 中使用参数标签以提高可读性。

关于ios - 存储在用户默认值中的 Swift 4 键值字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232544/

相关文章:

swift - 在 Swift 4 中向数组添加过滤器

ios - NSDictionary结果类型获取关系中的对象

javascript - 钛的Paypal集成问题

ios - 在 UiView 中添加标签

swift - 可解码,不解码具有无效值的可选枚举

ios - 廉价鲨鱼 API : reading NSDictionary without a key

ios - 从 NSDictionary 获取 JSON 值并放置在 NSString 中不起作用

javascript - 堆栈导航器给我未定义的错误

ios - 从iOS版本6.1.3的通讯录数据库中获取联系人时发生崩溃?

ios - 如何从两个不同的数组中找到共同的对象并打印另一个对象?