Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:将度量值存储为JSON_Json_Swift_Xcode_Measurement - Fatal编程技术网

Swift:将度量值存储为JSON

Swift:将度量值存储为JSON,json,swift,xcode,measurement,Json,Swift,Xcode,Measurement,我创建了一个结构来存储一些度量值。结构符合可编码协议,因此我可以将结构存储在JSON中。测量可以有不同的单位,所以我使用 测量 从磁盘检索数据时,我不能使用测量值,因为它们是作为维度返回的,我似乎无法找出它们的单位类型(例如单位质量、单位长度等)。这在应用程序中很重要,因为可能需要将测量值从公制单位转换为英制单位(例如,将千克转换为磅等) 下面是一个简短的代码示例来说明问题: struct StatisticalValues:Codable{ VarX:测量? var l:双倍? var m:双

我创建了一个结构来存储一些度量值。结构符合可编码协议,因此我可以将结构存储在JSON中。测量可以有不同的单位,所以我使用
测量

从磁盘检索数据时,我不能使用测量值,因为它们是作为维度返回的,我似乎无法找出它们的单位类型(例如单位质量、单位长度等)。这在应用程序中很重要,因为可能需要将测量值从公制单位转换为英制单位(例如,将千克转换为磅等)

下面是一个简短的代码示例来说明问题:

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中似乎是最简单的解决方案。我对这个问题进行了编辑,以澄清为什么我需要知道应用程序中维度的子类。