能够确定自定义的 UserDefault 套件是否存在,在最初创建时启用自定义行为
Ability to determine whether a custom suite of UserDefault exists, enabling custom behaviour when it’s initially created
我正在为 UserDefaults 创建自定义套件:
var store = UserDefaults(suiteName: "custom")
但是我需要根据套件是否已经存在来触发特定的行为。
具体而言,如果 未找到 套件,我希望使用预设 key/value 对对其进行初始化。如果找到了,则无需采取任何特殊措施。在真实场景中,想象一个应用程序最初启动时带有您可以单独删除的预设过滤器(即后续启动指的是过滤器的最新状态,而不是回退到预设)。
我知道我可以通过检查每个预设的可用性来检查 empty 状态,例如:
var found = 0
for key in presetKeys {
if let _ = UserDefaults(suiteName: "custom")?.object(forKey: key) {
found += 1
}
}
if found == 0 {
// empty suite
}
但是,这没有帮助,因为空状态并不表示第一个 运行。这可能是因为用户删除了自动分配给他们的所有预设。此外,用户可以创建自己的 key/value 对以添加到套件中。他们的密钥是动态生成的,排除了空状态检查(因为我不知道要查找什么密钥)。
总而言之,有没有一种方法可以简单地判断指定名称的套件是否已经存在?
如果是,即使删除了所有 key/value 对,套件是否继续存在?我不希望用户触发的空状态导致套件被永久删除,从而导致应用程序的下一个 运行 自动重新加载预设,因为它混淆了空状态和新状态。
希望这是有道理的!
没有 built-in 方法来检查特定 UserDefaults
套件是否已经存在。
但是,您可以创建一个具有 Bool
值的特殊键,您可以将其用作是否修改了任何预设值的标志。
does the suite continue to exist even when all its key/value pairs were removed?
是的。 UserDefaults
套件不需要保存任何值,它可以是空的。从套件中删除所有值不会影响套件本身的存在。
我正在为 UserDefaults 创建自定义套件:
var store = UserDefaults(suiteName: "custom")
但是我需要根据套件是否已经存在来触发特定的行为。
具体而言,如果 未找到 套件,我希望使用预设 key/value 对对其进行初始化。如果找到了,则无需采取任何特殊措施。在真实场景中,想象一个应用程序最初启动时带有您可以单独删除的预设过滤器(即后续启动指的是过滤器的最新状态,而不是回退到预设)。
我知道我可以通过检查每个预设的可用性来检查 empty 状态,例如:
var found = 0
for key in presetKeys {
if let _ = UserDefaults(suiteName: "custom")?.object(forKey: key) {
found += 1
}
}
if found == 0 {
// empty suite
}
但是,这没有帮助,因为空状态并不表示第一个 运行。这可能是因为用户删除了自动分配给他们的所有预设。此外,用户可以创建自己的 key/value 对以添加到套件中。他们的密钥是动态生成的,排除了空状态检查(因为我不知道要查找什么密钥)。
总而言之,有没有一种方法可以简单地判断指定名称的套件是否已经存在?
如果是,即使删除了所有 key/value 对,套件是否继续存在?我不希望用户触发的空状态导致套件被永久删除,从而导致应用程序的下一个 运行 自动重新加载预设,因为它混淆了空状态和新状态。
希望这是有道理的!
没有 built-in 方法来检查特定 UserDefaults
套件是否已经存在。
但是,您可以创建一个具有 Bool
值的特殊键,您可以将其用作是否修改了任何预设值的标志。
does the suite continue to exist even when all its key/value pairs were removed?
是的。 UserDefaults
套件不需要保存任何值,它可以是空的。从套件中删除所有值不会影响套件本身的存在。