如何从 Swift 中的 UserDefaults 中删除套件名称的所有数据?
How to remove all data by a suite name from UserDefaults in Swift?
我已经使用以下名称创建了用户默认值,
let prefs1 = UserDefaults.init(suiteName: "UserAccount")
let prefs2 = UserDefaults.init(suiteName: "UserInfo")
然后我为那些套件添加了一些值。即
prefs1.set(true, forKey: "Key1")
prefs1.set(true, forKey: "Key2")
prefs2.set(false, forKey: "Key1")
prefs2.set(false, forKey: "Key2")
现在,我想删除 prefs1
(即名称 "UserAccount"),但不删除 prefs2
。我试过了,
UserDefaults.standard.removePersistentDomain(forName: "UserAccount")
但是没有删除。我对 forName
和 suiteName
感到困惑
如何从 UserDefaults
中删除一个套件以保持 Swift 中的其他套件完好无损?
你可以试试
UserDefaults.standard.removeSuite(named: "UserAccount")
如果您只想删除密钥。你可以去关注
func removeAllFor(defaults: UserDefaults) {
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach { key in
defaults.removeObject(forKey: key)
}
}
然后你可以默认调用它来清除数据
removeAllFor(defaults: prefs1)
removeSuite(named:) : 删除通过 -addSuiteNamed 方法添加的子搜索列表
removePersistentDomain(forName: ) :从“domainName”指定的搜索列表条目中删除所有值。
我通常采用不同的方法来清理密钥,基于想法 "nil = no more exisiting":
// 使 属性:
var userName: String? {
set(NewValue) {
self.setUserDefault(value: NewValue, for: USERNAME_KEY)
}
get{
let v = self.getFromUserDefaultsWith(key: USERNAME_KEY) as? String
return v
}
}
// 附属函数:(这里是诀窍)
private final func getFromUserDefaultsWith(key: String) -> Any? {
let returnValue = UserDefaults.standard.object( forKey: key)
return returnValue
}
private final func setUserDefault(value: Any?, for key: String) {
let ud = UserDefaults.standard
if value == nil{
ud.removeObject(forKey: key)
}else{
ud.set(value, forKey: key)
}
ud.synchronize()
}
所以我可以写:
final func wipeOut() {
// if nil, we remove... see above.
self.setUserDefault(value: nil, for: USERNAME_KEY)
}
func removePersistentDomain(forName domainName: String)
https://developer.apple.com/documentation/foundation/userdefaults/1417339-removepersistentdomain
Calling this method is equivalent to initializing a user defaults
object with init(suiteName:) passing domainName, and calling the
removeObject(forKey:) method on each of its keys.
我已经使用以下名称创建了用户默认值,
let prefs1 = UserDefaults.init(suiteName: "UserAccount")
let prefs2 = UserDefaults.init(suiteName: "UserInfo")
然后我为那些套件添加了一些值。即
prefs1.set(true, forKey: "Key1")
prefs1.set(true, forKey: "Key2")
prefs2.set(false, forKey: "Key1")
prefs2.set(false, forKey: "Key2")
现在,我想删除 prefs1
(即名称 "UserAccount"),但不删除 prefs2
。我试过了,
UserDefaults.standard.removePersistentDomain(forName: "UserAccount")
但是没有删除。我对 forName
和 suiteName
如何从 UserDefaults
中删除一个套件以保持 Swift 中的其他套件完好无损?
你可以试试
UserDefaults.standard.removeSuite(named: "UserAccount")
如果您只想删除密钥。你可以去关注
func removeAllFor(defaults: UserDefaults) {
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach { key in
defaults.removeObject(forKey: key)
}
}
然后你可以默认调用它来清除数据
removeAllFor(defaults: prefs1)
removeSuite(named:) : 删除通过 -addSuiteNamed 方法添加的子搜索列表
removePersistentDomain(forName: ) :从“domainName”指定的搜索列表条目中删除所有值。
我通常采用不同的方法来清理密钥,基于想法 "nil = no more exisiting":
// 使 属性:
var userName: String? {
set(NewValue) {
self.setUserDefault(value: NewValue, for: USERNAME_KEY)
}
get{
let v = self.getFromUserDefaultsWith(key: USERNAME_KEY) as? String
return v
}
}
// 附属函数:(这里是诀窍)
private final func getFromUserDefaultsWith(key: String) -> Any? {
let returnValue = UserDefaults.standard.object( forKey: key)
return returnValue
}
private final func setUserDefault(value: Any?, for key: String) {
let ud = UserDefaults.standard
if value == nil{
ud.removeObject(forKey: key)
}else{
ud.set(value, forKey: key)
}
ud.synchronize()
}
所以我可以写:
final func wipeOut() {
// if nil, we remove... see above.
self.setUserDefault(value: nil, for: USERNAME_KEY)
}
func removePersistentDomain(forName domainName: String)
https://developer.apple.com/documentation/foundation/userdefaults/1417339-removepersistentdomain
Calling this method is equivalent to initializing a user defaults object with init(suiteName:) passing domainName, and calling the removeObject(forKey:) method on each of its keys.