Ufu*_*ker 0 swift userdefaults
我尝试了这段代码,但它给我带来了除我之外保存的所有密钥。我如何获得自己保存的密钥?
\n print("UD: \\(UserDefaults.standard.dictionaryRepresentation().keys) \\n")\nRun Code Online (Sandbox Code Playgroud)\n安慰:
\n\n我保存的密钥是“A\xc4\x9fustos Test 1”。\n我怎样才能只获得这个密钥?
\n理想情况下,您会知道该密钥或将所有密钥分组为另一个密钥的子项,但这不是您所要求的:)
一些解决方法:
你可以枚举 userDefaults 中的所有键,但你必须知道你会得到不属于你的键......
let dict = UserDefaults.standard.dictionaryRepresentation()
for key in dict.keys {
if let value = dict[key] {
print("\(key) = \(value)")
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印其中的所有内容,其中包括近一百个苹果配置值。所以..不好!
如果你的键有共同点,你可以反转过滤器:
import Foundation
let included_prefixes = ["myprefs.", "myprefs2."]
//my keys
UserDefaults.standard.set(1, forKey: "myprefs.int1")
UserDefaults.standard.set("str1", forKey: "myprefs2.str1")
let dict = UserDefaults.standard.dictionaryRepresentation()
let keys = dict.keys.filter { key in
for prefix in included_prefixes {
if key.hasPrefix(prefix) {
return true
}
}
return false
}
for key in keys {
if let value = dict[key] {
print("\(key) = \(value)")
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您真的不知道您的密钥,您可以将它们过滤掉
import Foundation
let blacklisted_prefixes = ["Country", "NS", "com.apple", "com.omnigroup", "NavPanel", "WebAutomatic", "NSTableViewDefaultSizeMode", "sks_agent", "Apple", "PayloadUUID", "PKSecure", "_HI", "AK", "ContextMenu", "MultipleSession", "CSUI"]
//my keys
UserDefaults.standard.set(1, forKey: "int1")
UserDefaults.standard.set("str1", forKey: "str1")
let dict = UserDefaults.standard.dictionaryRepresentation()
let keys = dict.keys.filter { key in
for prefix in blacklisted_prefixes {
if key.hasPrefix(prefix) {
return false
}
}
return true
}
for key in keys {
if let value = dict[key] {
print("\(key) = \(value)")
}
}
Run Code Online (Sandbox Code Playgroud)
但这非常脆弱,并不可取!
#需要必须
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |