如何在NSMutableData中表示零或零双值?

时间:2015-04-14 08:43:15

标签: swift binary double nsmutabledata

我有一个double值数组,应存储在外部文件中。我将数组转换为NSMutableData并将数据保存到磁盘。

某些双精度值缺失(零)或为零(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&#39;哦,我正在使用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

我现在需要醒来。

1 个答案:

答案 0 :(得分:0)

我想到的唯一解决方案是使用NSNumber包装双精度数,因此可以正确处理0.0,nulls然后可以使用NSNull。您是否有任何特定原因未使用NSNumber