Swift认为C const指针是可变的吗?

问题描述 投票:1回答:1

我正在使用桥接标头在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'将解决问题,但为什么有必要?

swift
1个回答
0
投票

let b是一个常量,因此您不能将其作为&b的inout参数传递。但是您可以使用withUnsafePointer(to:)获得指向其值的(临时)指针,并将其传递给C函数。

withUnsafePointer(to:)
© www.soinside.com 2019 - 2024. All rights reserved.