【发布时间】:2016-06-14 10:22:27
【问题描述】:
我使用 swift 数组作为一个函数的输出缓冲区,该函数接受一个指针并填充它,如下所示:
var buffer : [Int32] = ...
tehFillFunc(UnsafeMutablePointer<Int32>(buffer))
这很好用,问题是编译器抱怨Variable 'buffer' was never mutated; consider changing to 'let' constant,我不想这样做,因为我很确定它在我的填充函数中发生了变异。
那么,有没有办法让它静音呢? (我可以做一些虚拟设置,但我更愿意正确地做)。
编辑:按照要求显示问题的完整示例代码(甚至不需要 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)
【问题讨论】:
-
您的代码没有收到任何警告...
-
@MartinR 你说的对,不知道原来的C函数是怎么声明的。
-
我假设
void tehFillFunc(int *ptr);。 -
请用一个(小)自包含示例来说明问题。
-
而且它似乎独立于 c/swift 作为函数的来源——只是 swift 声明形式很重要。
标签: arrays swift unsafemutablepointer