Swift:将度量值存储为JSON
我创建了一个结构来存储一些度量值。结构符合可编码协议,因此我可以将结构存储在JSON中。测量可以有不同的单位,所以我使用Swift:将度量值存储为JSON,json,swift,xcode,measurement,Json,Swift,Xcode,Measurement,我创建了一个结构来存储一些度量值。结构符合可编码协议,因此我可以将结构存储在JSON中。测量可以有不同的单位,所以我使用 测量 从磁盘检索数据时,我不能使用测量值,因为它们是作为维度返回的,我似乎无法找出它们的单位类型(例如单位质量、单位长度等)。这在应用程序中很重要,因为可能需要将测量值从公制单位转换为英制单位(例如,将千克转换为磅等) 下面是一个简短的代码示例来说明问题: struct StatisticalValues:Codable{ VarX:测量? var l:双倍? var m:双
测量
从磁盘检索数据时,我不能使用测量值,因为它们是作为维度返回的,我似乎无法找出它们的单位类型(例如单位质量、单位长度等)。这在应用程序中很重要,因为可能需要将测量值从公制单位转换为英制单位(例如,将千克转换为磅等)
下面是一个简短的代码示例来说明问题:
struct StatisticalValues:Codable{
VarX:测量?
var l:双倍?
var m:双倍?
var s:双倍?
}
var检验=统计值(x:测量值(值:1.0,单位:单位质量千克),l:1.0,m:2.0,s:3.0)
//在编码为JSON并解码之后,我尝试用这段代码找出维度单位
如果让testUnit=test.x?unit{
开关测试单元{
案例为单位质量:打印(“测试为单位质量”)
大小写为单位长度:打印(“测试为单位长度”)
默认值:打印(“测试是另一个单元”)
}
}
//这将始终返回默认情况,即使存储的单位是单位质量
如果让testX=test.x{
设convertedX=testX.converted(单位质量磅)
}
//给出一个错误:
//“***必须在类NSDimension中重写baseUnit以定义其基本单位。”
在JSON编码之前打印单位会得到如下结果:lb
解码JSON后,它是lb
(度量单位为磅)。因此符号保持不变,但单位类型发生了变化
为了纠正这个问题,我编写了一个例程,根据正确存储的符号,手动将正确的单元类型分配给解码的结构,但是这个解决方案似乎过于复杂且容易出错
有没有办法更优雅地解决这个问题?一如既往地感谢你的想法 如果执行
print(result.x.value)
和print(result.x.unit.symbol)
操作,您将看到x是1kg,这是您在创建对象时使用的重量,因此一切都是应该的。我认为这里的问题是,没有人承诺该单元是可编码的,事实上并非如此。问一下为什么要明确地谈论维度的类型可能会很有用。嘿,马特,谢谢你考虑我的问题。我想存储一个小型的测量数据库。将数据存储在JSON中似乎是最简单的解决方案。我对这个问题进行了编辑,以澄清为什么我需要知道应用程序中维度的子类。