gpt4 book ai didi

ios - 使用 NSKeyedArchiver 编码具有无限维度的 CGSize 失败

转载 作者:行者123 更新时间:2023-11-28 06:32:20 26 4
gpt4 key购买 nike

我试图在 UserDefaults 中存储一个 CGSize。尺寸的宽度或高度可以是 CGFloat.infinity。我将大小放入 NSValue 并使用 NSKeyedArchiver 对其进行编码和解码:

let size = CGSize(width: CGFloat.infinity, height: 50)
let value = NSValue(cgSize: size)

let data = NSKeyedArchiver.archivedData(withRootObject: value)
let unarchivedValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! NSValue

问题:当其中一个维度为 .infinity 时,未归档的大小是错误的:

print(size == value.cgSizeValue)  // true
print(size == unarchivedValue.cgSizeValue) // false

print(size) // width: inf, height: 50.0
print(unarchivedValue.cgSizeValue) // width: 50.0, height: 0.0

请注意,奇怪的是,宽度的值之前是高度。

Double.infinity 的结果相同。

最佳答案

您可以将 CGSize 保存到字符串中:

let size = CGSize(width: CGFloat.infinity, height: 50)
let sizeString = NSStringFromCGSize(size)
let decodedSize = CGSizeFromString(sizeString)

这将恢复 0 而不是无穷大,但高度和宽度不会弄乱。

关于ios - 使用 NSKeyedArchiver 编码具有无限维度的 CGSize 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39975451/

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