我正在使用桥接标头在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指针。 const指针不是一成不变的吗?
我知道将'b'更改为'var b'将解决问题,但为什么有必要?
let b
是一个常量,因此您不能将其作为&b
的inout参数传递。但是您可以使用withUnsafePointer(to:)
获得指向其值的(临时)指针,并将其传递给C函数。
withUnsafePointer(to:)