2

この質問を書いている時点で、私は 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)
4

1 に答える 1