如何在Swift 4中使用sizeof()方法

3

我正在尝试实现这段代码,这段代码来自于苹果公司的WWDC视频。然而,该视频是2016年的,我认为语法已经改变了。我如何调用sizeof(Float)?这会产生一个错误。

func render(buffer:AudioBuffer){
    let nFrames = Int(buffer.mDataByteSize) / sizeof(Float)
    var ptr = UnsafeMutableRawPointer(buffer.mData)
    var j = self.counter
    let cycleLength = self.sampleRate / self.frequency
    let halfCycleLength = cycleLength / 2
    let amp = self.amplitude, minusAmp = -amp
    for _ in 0..<nFrames{
        if j < halfCycleLength{
            ptr.pointee = amp
        } else {
            ptr.pointee = minusAmp
        }
        ptr = ptr.successor()
        j += 1.0
        if j > cycleLength {

        }
    }
    self.counter = j
}

1
Swift 3 的这个答案在 Swift 4 中仍然有效。 - OOPer
1
MemoryLayout<Float>.size - Leo Dabus
1个回答

11

sizeof()函数在Swift中不再受支持。

正如Leo Dabus在他的评论中所说,您需要使用MemoryLayout<Type>.size,或者在您的情况下,MemoryLayout<Float>.size

请注意,它告诉您该类型项目的抽象大小。但是,由于对齐,您不应假设包含不同类型项目的结构将是其他元素大小之和。另外,您需要考虑运行设备。在64位设备上,Int为8个字节,在32位设备上,它为4个字节。

有关更多信息,请参见SwiftDoc.org上的MemoryLayout文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接