Cast C struct指向Swift结构不安全指针的双指针

我需要在Swift(4)中进行以下C转换:

struct A ** castme = input struct B * tothis = (struct B *)castme 

在Swift中, castme类型是UnsafeMutablePointer<UnsafeMutablePointer?>!

我假设我正在尝试转换为UnsafeMutablePointer!

另外,说我也可以直接将*(castme)转换为(struct B)是否正确? 如果是,是否可以通过从UnsafeMutablePointer?进行投射来UnsafeMutablePointer?B

我看到了这个线程但是无法从中获得我需要的东西: 在Swift中转换为不同的C struct unsafe指针

让我们根据C中发生的事情来考虑这一点。当我在C中执行指针转换时,表示指针类型的数据现在将被视为不同类型的指针。 指针的值不会改变,只是你如何对待它。

Swift不喜欢做这种事情并且不鼓励你这样做,因为虽然价格便宜,但这是一个根本不安全的事情,可能会导致数据损坏,跳入太空,总线错误等。

这并不意味着swift没有能力做到这一点。 您指向的链接使用withUnsafePointerTo ,它试图限制指针使用的范围。 在你的情况下,你可能想看看模仿C指针unsafeBitCast ( 这里的文档)(它通常与C强制转换并不完全相同,但对于指针来说却是如此)。

 let a:UnsafeMutablePointer = fetchASomeTypePointer() let b = unsafeBitCast(a, to: UnsafeMutablePointer.self) 

这使得表示SomeType指针的数据现在成为SomeOtherType的指针。

就像我之前说的那样,这是一件危险的事情,特别是如果你不完全明白你在做什么的话。