gpt4 book ai didi

swift - 顶级 Bool 编码为数字属性列表片段。属性列表编码器

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:56 31 4
gpt4 key购买 nike

我有这个通用函数可以保存在 NSUserDefaults 中,通常可以正常工作,但现在我想保存一个 boolean 值,但出现错误。我找不到任何东西,我不明白为什么它不起作用。

extension UserDefaults {
func saveUserDefaults<T: Codable>(withKey key: String, myType: T) throws{
do {
let data = try PropertyListEncoder().encode(myType)
UserDefaults.standard.set(data, forKey: key)
print("Saved for Key:", key)
} catch let error {

print("Save Failed")
throw error
}
}

我是这样调用它的:

try! UserDefaults().saveUserDefaults(withKey: "String", myType: false)

这是我得到的错误。我知道还有另一种保存 boolean 值的方法,但我想知道为什么它不能像这样工作?

Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: Swift.EncodingError.invalidValue(false, Swift.EncodingError.Context(codingPath: [], debugDescription: "Top-level Bool encoded as number property list fragment.", underlyingError: nil))

谢谢!

最佳答案

PropertyListEncoder 编码为“属性列表”,这始终是一个数组或字典,比较 PropertyListSerialization .

因此

let data = try PropertyListEncoder().encode(myType)

如果 myType 是一个 Bool(或任何不是数组的东西)则失败或字典)。

属性列表中可能的对象也有限制,它们只能是的实例NSDataNSStringNSArrayNSDictionaryNSDateNSNumber – 或 Swift 类型桥接到其中一种基础类型。

关于swift - 顶级 Bool 编码为数字属性列表片段。属性列表编码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53177348/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com