我正在为UserDefaults:创建一个自定义套件
var store = UserDefaults(suiteName: "custom")
然而,我需要根据套件是否已经存在来触发特定行为。
具体地说,如果套件是而不是,我希望它用预设的键/值对进行初始化。如果被发现,就不需要采取任何特别行动。在现实世界中,想象一个应用程序最初启动时带有预设过滤器,您可以单独删除这些过滤器(即,后续启动指的是过滤器的最新状态,而不是回到预设状态(。
我知道我可以通过检查每个预设的可用性来检查空状态,例如:
var found = 0
for key in presetKeys {
if let _ = UserDefaults(suiteName: "custom")?.object(forKey: key) {
found += 1
}
}
if found == 0 {
// empty suite
}
然而,这没有帮助,因为空状态并不表示第一次运行。这可能是因为用户删除了他们自动分配的所有预设。此外,用户还可以创建自己的密钥/值对以添加到套件中。它们的密钥是动态生成的,排除了空状态检查(因为我不知道要查找什么密钥(。
总之,有没有一种方法可以简单地判断指定名称的套件是否已经存在?
如果是,即使移除了所有的键/值对,套件是否仍然存在?我不希望出现用户触发的空状态导致套件被永久删除的情况,从而导致应用程序的下一次运行自动重新加载预设,因为它混淆了空状态和新状态。
希望这是有道理的!
没有内置的方法来检查特定的UserDefaults
套件是否已经存在。
但是,您可以创建一个具有Bool
值的特殊键,将其用作是否修改任何预设值的标志。
即使移除了所有的键/值对,套件是否仍然存在?
是。UserDefaults
套件不需要保存任何值,它可以是空的。从套件中删除所有值不会影响套件本身的存在。