我正在使用swift数组作为输出缓冲区,用于获取指针并填充它的函数,如下所示:
var buffer : [Int32] = ...
tehFillFunc(UnsafeMutablePointer<Int32>(buffer))
这很好用,问题是编译器抱怨Variable 'buffer' was never mutated; consider changing to 'let' constant
,我不想这样做,因为我很确定它在我的fill函数中被突变了。
那么,有没有办法让它沉默? (我可以做一些虚设,但我更愿意这样做。)
编辑:根据要求提供显示问题的完整示例代码(c甚至不需要):
class ViewController: UIViewController {
func fill(sth: UnsafeMutablePointer<Int32>) {
sth[0] = 7
}
override func viewDidLoad() {
super.viewDidLoad()
var array = [Int32].init(count: 10, repeatedValue: 0)
fill(UnsafeMutablePointer<Int32>(array))
print("\(array)")
}
}
但是,该解决方案已经发布。最简单的形式:
fill(&array)
答案 0 :(得分:2)
通常您需要指定缓冲区大小。在这种情况下,我更喜欢以下解决方案:
let bufferSize = 1000
var buffer = [Int32](count: bufferSize, repeatedValue: 0)
tehFillFunc(&buffer)
答案 1 :(得分:1)
为此目的,Array
上有一个方法:
var buffer : [Int32] = ...
buffer.withUnsafeMutableBufferPointer {
tehFillFunc($0.baseAddress)
}
我确保数组至少存在,直到withUnsafeMutableBufferPointer
返回。因为它需要inout
参数,所以缓冲区必须是var
。