まず、.withUnsafeBufferPointer { $0.baseAddress }
のイディオムを使用して、Swift Array
のアドレスを取得することはお勧めしません。そのイディオムから取り出されたアドレスは、クロージャの外側で有効であるとは保証されません。あなたが安定したポインタを使用する必要がある場合
inputSignal.withUnsafeBufferPointer {buffer in
buffer.baseAddress!.withMemoryRebound(to: DSPComplex.self, capacity: inputSignal.count/(MemoryLayout<DSPComplex>.size/MemoryLayout<Float>.size)) {xAsComplex in
//`xAsComlex` is guaranteed to be valid only in this closure.
//...
}
}
は、あなたが実際のポインタとして、それらを管理する必要がある場合があります
だから、あなたはこのような何かを書くことができます。
let inputSignalCount = 512
let inputSignal = UnsafeMutablePointer<Float>.allocate(capacity: inputSignalCount)
inputSignal.initialize(to: 0.0, count: inputSignalCount)
//...
inputSignal.withMemoryRebound(to: DSPComplex.self, capacity: inputSignalCount/(MemoryLayout<DSPComplex>.size/MemoryLayout<Float>.size)) {xAsComplex in
//`xAsComlex` is guaranteed to be valid only in this closure.
//...
}
//...
//Later when `inputSignal` is not needed any more...
inputSignal.deinitialize(count: inputSignalCount)
inputSignal.deallocate(capacity: inputSignalCount)
ありがとう、私は閉鎖を使用して、うまくいった! –