我有一个项目当前有一个C结构,它被定义为:
typedef struct IDList {
uint32_t listID;
uint32_t count;
uint32_t idArray[];
} __attribute__((packed, aligned(4))) IDList, *IDListPtr;
在Objective-C类中,有一个方法返回idListptr给我。
我知道我可以:
let idListPtr = theIDManager.getIDList() // ObjC class that returns the struct
let idList = idListPtr.pointee // Get the IDList struct from the pointer
我知道结构的数组中有
idList.count
项,但是如何以swift访问该数组? 最佳答案
C中的零长度数组在swift中不可见。可能的解决方法是在桥接头文件中添加一个助手函数,该函数返回第一个数组项的地址:
static uint32_t * _Nonnull idArrayPtr(const IDListPtr _Nonnull ptr) { return &ptr->idArray[0]; }
现在,您可以在swift中创建一个“缓冲指针”,它引用可变长度数组:
let idListPtr = getIDList()
let idArray = UnsafeBufferPointer(start: idArrayPtr(idListPtr), count: Int(idListPtr.pointee.count))
for item in idArray {
print(item)
}
关于arrays - 如何在Swift中访问包含可变大小数组的C结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54101980/