我在Objective-C库的回调中收到了其中一个:UnsafeMutablePointer<UInt8>
我能够解析它。我也可以创建一个将其发送回图书馆,但是:使用&#34;不安全&#34;有什么风险?类型?我该如何避免这些风险?
此外,Objective-C库正在使用uint8_t *
,它与Swift桥接,因为UnsafeMutablePointer<UInt8>
...这对于Swift互操作来说是最好的吗?
答案 0 :(得分:5)
UnsafeMutablePointer
是你在Swift中表示C指针的方式。这是不安全的,因为指针指向的底层内存可能随时更改,而Swift指针不知道。它也没有关于它指向的内存块大小的信息(感谢Martin)。
如果您的库要求您使用C类型,在这种情况下是指向uint8_t
的指针,那么您必须使用UnsafeMutablePointer
。否则,如果您只想表示一组数字,我会将uint8_t
类型中的所有NSArray
类型包裹为NSNumber
类型(如果您指向NSData
,则为TabPage
一个字节流),以便更轻松地进行桥接。
您可以通过取消引用指针(如果它是非零)并将存储在指针中的值复制到Swift应用程序中的变量来避免这些风险。