首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >‘'init不可用:使用'withMemoryRebound(to:capacity:_)’将内存临时视为另一个布局兼容类型

‘'init不可用:使用'withMemoryRebound(to:capacity:_)’将内存临时视为另一个布局兼容类型
EN

Stack Overflow用户
提问于 2017-03-30 03:26:31
回答 1查看 3.4K关注 0票数 3

由于我将我的代码转换为Swift 3,因此发生了错误。

代码语言:javascript
复制
'init is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type.

以下是我的代码:

代码语言:javascript
复制
func parseHRMData(data : NSData!)
{
    var flags : UInt8
    var count : Int = 1
    var zw = [UInt8](count: 2, repeatedValue: 0)

    flags = bytes[0]
    /*----------------FLAGS----------------*/
        //Heart Rate Value Format Bit
        if([flags & 0x01] == [0 & 0x01])
        {
            //Data Format is set to UINT8
            //convert UINT8 to UINT16
            zw[0] = bytes[count]
            zw[1] = 0
            bpm = UnsafePointer<UInt16>(zw).memory

            print("HRMLatitude.parseData Puls(UINT8): \(bpm)BPM")

            //count field index
            count = count + 1
        }

如何修复此错误?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 03:42:42

zw是一个UInt8数组。要将指向元素存储的指针重新解释为指向UInt16的指针,必须在Swift 3中调用withMemoryRebound()。在您的示例中:

代码语言:javascript
复制
var zw = [UInt8](repeating: 0, count: 2)
// Alternatively:
var zw: [UInt8] = [0, 0]

// ...

let bpm = UnsafePointer(zw).withMemoryRebound(to: UInt16.self, capacity: 1) {
    $0.pointee
}

另一种解决方案是

代码语言:javascript
复制
let bpm = zw.withUnsafeBytes {
    $0.load(fromByteOffset: 0, as: UInt16.self)
}

有关原始指针、类型化指针和重新绑定的更多信息,请参见SE-0107 UnsafeRawPointer API

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43102493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档