【问题标题】:How to use sizeof() method in Swift 4如何在 Swift 4 中使用 sizeof() 方法
【发布时间】:2018-08-13 23:53:13
【问题描述】:

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

【问题讨论】:

  • This answer for Swift 3 在 Swift 4 中仍然有效。
  • MemoryLayout&lt;Float&gt;.size

标签: swift sizeof audiobuffer


【解决方案1】:

Swift 不再支持sizeof() 函数。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多