随着NSMutableData我可以创建数组Int's或Float的和存储的磁盘.
protocol BinaryConvertible
{
init()
}
extension Int : BinaryConvertible {}
struct Storage<T: BinaryConvertible>
{
let data = NSMutableData()
func append(value: T)
{
var input = value
data.append(&input, length: sizeof(T))
}
func extract(index: Int) -> T
{
var output = T()
let range = NSRange(location: index * sizeof(T), length: sizeof(T))
data.getBytes(&output, range: range)
return output
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 3有一种在引擎盖下Data使用的新型NSData.喜欢String和NSString.我无法弄清楚如何添加例如Double使用新方法.
append函数现在需要a UnsafePointer<UInt8>,但是你如何从一个Double或任何随机结构创建它?
Cod*_*ent 10
使用指针是我在Swift中最不喜欢的事情之一,但它也提供了良好的学习体验.这对我有用:
struct Storage<T: BinaryConvertible>
{
var data = Data()
mutating func append(value: T)
{
var input = value
let buffer = UnsafeBufferPointer(start: &input, count: 1)
self.data.append(buffer)
}
func extract(index: Int) -> T
{
let startIndex = index * sizeof(T)
let endIndex = startIndex + sizeof(T)
var output = T()
let buffer = UnsafeMutableBufferPointer(start: &output, count: 1)
let _ = self.data.copyBytes(to: buffer, from: startIndex..<endIndex)
return output
}
}
var s = Storage<Double>()
s.append(value: M_PI)
s.append(value: 42)
s.append(value: 100)
print(s.extract(index: 0))
print(s.extract(index: 1))
print(s.extract(index: 2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7009 次 |
| 最近记录: |