10

Swift 3に更新した後、コードに少し問題があります。変換前にこのコードがありました:

extension NSData {
  func castToCPointer<T>() -> T {
    let mem = UnsafeMutablePointer<T>.alloc(sizeof(T.Type))
    self.getBytes(mem, length: sizeof(T.Type))
    return mem.move()
  }
}

そして、私はそれをこのコードに変換し、3行目にエラーが発生しました

...型「UnsafeMutablePointer」の値を期待される引数型「UnsafeMutablePointer」に変換できません

extension Data {
  func castToCPointer<T>() -> T{
    let mem = UnsafeMutablePointer<T>.allocate(capacity: MemoryLayout<T.Type>.size)
    self.copyBytes(to: mem, count: MemoryLayout<T.Type>.size)
    //self.copyBytes(to: mem, count: MemoryLayout<T.Type>.size)
    return mem.move()
  }
}

これを取り除く方法を知っている人はいますか?

4

2 に答える 2

-1

拡張機能で以下の構文を使用することもできます

extension Data {
    func castToCPointer<T>() -> T {
        var bytes = self.bytes
        var val = withUnsafePointer(to: &bytes) { (temp) in
            return unsafeBitCast(temp, to: T.self)
        }
        return val
    }
}

var data:NSData/NSMutableData
var bytes = data.bytes
var val = withUnsafePointer(to: &bytes) { (temp) in
   return unsafeBitCast(temp, to: T.self)
}
于 2016-11-02T18:19:14.067 に答える