この質問を書いている時点で、私は Swift 2.1 と Xcode 7.2.1 を使用しています。
以下のコード ( a をエンコードするためのものstruct
) は機能せず、Xcode プレイグラウンドがエラーなしでクラッシュします。プロジェクト内では、コンパイル中にセグメンテーション違反が発生します。
protocol StructCoding {
typealias structType
func encode() -> NSData
static func decode(data: NSData) -> Self
}
extension StructCoding {
mutating func encode() -> NSData {
return withUnsafePointer(&self) { p in
NSData(bytes: p, length: sizeofValue(self))
}
}
static func decode(data: NSData) -> structType {
let pointer = UnsafeMutablePointer<structType>.alloc(sizeof(structType))
data.getBytes(pointer, length: sizeof(structType))
return pointer.move()
}
}
struct testStruct: StructCoding {
let a = "dsd"
let b = "dad"
typealias structType = testStruct
}
しかし、これらは機能する可能性があります。
struct testStruct: StructCoding {
let a = "dsd"
let b = "dad"
mutating func encode() -> NSData {
return withUnsafePointer(&self) { p in
NSData(bytes: p, length: sizeofValue(self))
}
}
static func decode(data: NSData) -> testStruct {
let pointer = UnsafeMutablePointer<testStruct>.alloc(sizeof(testStruct))
data.getBytes(pointer, length: sizeof(testStruct))
return pointer.move()
}
}
var s1 = testStruct()
let data = s1.encode()
let s2 = testStruct.decode(data)