使用 Swift 的 Measurement() 类型将 String 转换为 UnitType

Using Swift's Measurement() type convert String into UnitType

提问人:Peel 提问时间:10/28/2023 更新时间:10/28/2023 访问量:44

问:

我正在将我的应用程序国际化,以便在任何系统中接受和返回测量值。因此,在创建(用户从选取器中选择单位类型)时,我将无法使用硬编码。我通过将用户输入的值分别存储为 Double 和 UnitType 作为 String 来存储到 Core Date 中。例如:UnitTypeMeasurement(value: value, unit: unit)

person.height = 190.0
person.heightUnit = "UnitLength.centimeters"

如果我将 UnitType 硬编码为 UnitLength.centimeters,如下所示:

let personHeight = 190.0

let height = Measurement(value: personHeight, unit: UnitLength.centimeters)

Text("Height = \(height.formatted(.measurement(width: .abbreviated, usage: .personHeight).locale(Locale(identifier: "en-US"))))")

它返回预期的“高度 = 6 英尺,2.8 英寸”

如果我随后尝试从 person.heightUnit 中的值构造 UnitType,如下所示:

let personHeight = 190.0
let personHeightUnit = "UnitLength.centimeters"

let unit = UnitLength(symbol: personHeightUnit)
let height = Measurement(value: personHeight, unit: unit)
Text("Height = \(height.formatted(.measurement(width: .abbreviated, usage: .personHeight).locale(Locale(identifier: "en-US"))))")

这将返回“高度 = 0 英寸”

如何将存储在 CoreData 中的字符串“UnitLength.centimeters”转换为与 Measurement 一起使用的 Unit 类型?

SWIFT 核心数据 计量单位

评论

0赞 Sweeper 10/28/2023
您应该能够将整个存储在 CoreData 中,作为 .毕竟,它符合 。查看 stackoverflow.com/q/67113930/5133585MeasurementTransformableNSCoding
0赞 Peel 10/28/2023
好吧,这与我在另一篇文章中读到的内容不同,其中指出:“真正的问题是可转换属性仅适用于符合 NSCoding 的类,或者您已经为其编写了自己的自定义值转换器。由于 Measurement 不是一个类,并且不符合 NSCoding,因此您不能将其与可转换属性一起使用。不过那是从 2018 年开始的,所以也许从那时起测量发生了变化?
1赞 Sweeper 10/28/2023
不知道那在说什么。 符合 。实际尝试怎么样?MeasurmentNSCoding
0赞 Peel 10/28/2023
@Sweeper,但我仍然需要构造一个 Unit 变量才能首先创建测量。我可以作为变量传入。一定有办法进去。Xcode 想用它来修复我的错误,这就是我尝试的原因,但它显然没有像我想象的那样工作。valueunitUnitLength(symbol: String)
0赞 lorem ipsum 10/28/2023
改为保存符号,您可以将该符号与您创建的函数/下标一起使用,以获取 Swift 提供的单位而不是空单位,这是一个已知行为。

答: 暂无答案