我正在使用桥接头在 Swift 中导入 C 标头。我的 C API 看起来像这样:
typedef struct MyStruct {
char buff[80];
} MyStruct;
const char* GetBuff(const MyStruct* m);
现在在 Swift 中,我尝试这样称呼它:
let b = MyStruct()
let mystr = String(cString: GetBuff(&b))
然后我得到这个编译错误:“不能将不可变值作为 inout 参数传递:'b' 是一个 'let' 常量”。为什么是这样?GetBuff() 的参数是一个常量指针。const 指针不是不可变的吗?
我知道将 'b' 更改为 'var b' 可以解决问题,但为什么有必要呢?
let b
是一个常量,因此您不能将其作为 inout 参数传递给&b
. 但是您可以使用withUnsafePointer(to:)
获取指向其值的(临时)指针并将其传递给 C 函数。
let b = MyStruct()
let mystr = withUnsafePointer(to: b) { String(cString: GetBuff($0)) }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句