【发布时间】:2015-04-14 08:43:15
【问题描述】:
我有一个应该存储在外部文件中的双精度值数组。我将数组转换为 NSMutableData 并将数据保存到磁盘。
某些双精度值要么缺失 (nil),要么为零 (0.0)。 缺失值可以用 0.0 或最大双精度表示来替换。
但 Double 没有最大值(如 Int.max),并且 NSData 将 0.0 值解释为终止字节。所以每次遇到 0.0 的值,数据就结束得太快了。
var description: String {
var output: String = ""
for value in self
{
output = output + "\(value)\n"
}
return output
}
var count : Int { return data.length/sizeof(Double) }
func append(var value: Double)
{
self.data.appendBytes(&value, length: self.size)
}
subscript(index: Int) -> Double?
{
assert(index < self.count, "index exceeds bounds")
var output : Double?
self.data.getBytes(&output, range: NSRange(location: index * self.size, length: self.size))
return output
}
编辑:
D'Oh,我使用 generate 打印出值,并且 GeneratorOf 在第一个 nil 值之后停止。不过,表示零值以区别于 0.0 的好方法是什么?
func generate() -> GeneratorOf<Double>
{
var index = 0
var count = self.counter
return GeneratorOf<Double> {
if index < count
{
return self[index++]
}
return nil
}
}
edit2
它是 Double.infinity 而不是 Int.max
我现在需要醒来。
【问题讨论】:
-
“0.0 值被 NSData 解释为终止字节” – 不,NSData 根本不解释字节。
-
那么为什么我只取回前几个值呢? ... oh... d'oh,generate 函数(SequenceType)在遇到 nil 值时终止。
标签: swift binary double nsmutabledata