withMemoryRebound与苹果Swift 3 beta 6一起使用
发布时间:2020-12-14 05:29:08 所属栏目:百科 来源:网络整理
导读:我有以下问题.我想转换我的旧功能(工作直到 Swift 3 beta 5): func binarytotype T (_ value: [UInt8],_: T.Type) - T{ return value.withUnsafeBufferPointer { return UnsafePointerT($0.baseAddress!).pointee }} 到Swift 3 beta 6语法.此函数将UInt8数
我有以下问题.我想转换我的旧功能(工作直到
Swift 3 beta 5):
func binarytotype <T> (_ value: [UInt8],_: T.Type) -> T { return value.withUnsafeBufferPointer { return UnsafePointer<T>($0.baseAddress!).pointee } } 到Swift 3 beta 6语法.此函数将UInt8数组转换为另一种类型,例如: let b: [UInt8] = [1,2,3,4,5,6,7,8] var number: Double = binarytotype(b,Double.self) 但是现在这在beta 6中不再起作用了,我必须使用withMemoryRebound,但我真的不知道,如何让它运行.有谁能够帮我? 相反的功能是: func typetobinary <T> (_ value: T) -> [UInt8] { var v: T = value return withUnsafePointer(to: &v) { Array(UnsafeBufferPointer(start: UnsafePointer<UInt8>($0),count: MemoryLayout<T>.size)) } } 这也不再适用.同样的问题.我的一些项目都需要这两个项目.这个反向函数被称为: var binary: [UInt8] = typetobinary(number)
自Xcode 8 beta 6以来,指针转换现在更加“冗长”.
这是一个可能的解决方案: func binarytotype <T> (_ value: [UInt8],_: T.Type) -> T { return value.withUnsafeBufferPointer { UnsafeRawPointer($0.baseAddress!).load(as: T.self) } } func typetobinary<T>(_ value: T) -> [UInt8] { var data = [UInt8](repeating: 0,count: MemoryLayout<T>.size) data.withUnsafeMutableBufferPointer { UnsafeMutableRawPointer($0.baseAddress!).storeBytes(of: value,as: T.self) } return data } 例: let d = typetobinary(UInt16(1000)) print(d) // [232,3] let i = binarytotype(d,UInt16.self) print(i) // 1000 请参阅SE-0107 UnsafeRawPointer API有关新原始指针API的详细信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |