2

我正在尝试实现从苹果 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
}
4

1 回答 1

9

sizeof()Swift 不再支持该函数。

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

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

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

于 2018-08-14T00:07:50.560 回答