Objective c 使用指针访问Swift/Obj-c到Swift转换中的指针

Objective c 使用指针访问Swift/Obj-c到Swift转换中的指针,objective-c,swift,Objective C,Swift,我试图在Swift中执行以下操作: CFArrayRef attachmentsArray = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, 0); if (CFArrayGetCount(attachmentsArray)) { CFBooleanRef notSync; CFDictionaryRef dict = CFArrayGetValueAtIndex(attachmentsArra

我试图在Swift中执行以下操作:

CFArrayRef attachmentsArray = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, 0);
    if (CFArrayGetCount(attachmentsArray)) {
        CFBooleanRef notSync;
        CFDictionaryRef dict = CFArrayGetValueAtIndex(attachmentsArray, 0);
        BOOL keyExists = CFDictionaryGetValueIfPresent(dict,
                                                   kCMSampleAttachmentKey_NotSync,
                                                   (const void **)&notSync);
我有:

if CFArrayGetCount(attachmentsArray) != 0 {
    let dict = CFArrayGetValueAtIndex(attachmentsArray, 0)
然而,dict是一个不安全的指针,而不是它应该是的字典。当我打印附件时,我得到了

可选({DependsOnOthers=0;})

我尝试将其强制转换为CFDictionaryRef,但在运行时失败。 如何在Swift中成功执行上述Obj-C代码

然而,dict是一个不安全的指针,而不是它应该是的字典

不,不是“应该这样”。看看宣言:

func CFArrayGetValueAtIndex(theArray: CFArray!, _ idx: CFIndex) 
    -> UnsafePointer<Void>
func CFArrayGetValueAtIndex(数组:CFArray!,ux:CFIndex)
->不安全指针
它返回一个指向void的UnsafePointer,因为它应该这样做。(在Objective-C中,它返回一个
常量void*

然而,dict是一个不安全的指针,而不是它应该是的字典

不,不是“应该这样”。看看宣言:

func CFArrayGetValueAtIndex(theArray: CFArray!, _ idx: CFIndex) 
    -> UnsafePointer<Void>
func CFArrayGetValueAtIndex(数组:CFArray!,ux:CFIndex)
->不安全指针
它返回一个指向void的UnsafePointer,因为它应该这样做。(在Objective-C中,它返回一个
常量void*

然而,dict是一个不安全的指针,而不是它应该是的字典

不,不是“应该这样”。看看宣言:

func CFArrayGetValueAtIndex(theArray: CFArray!, _ idx: CFIndex) 
    -> UnsafePointer<Void>
func CFArrayGetValueAtIndex(数组:CFArray!,ux:CFIndex)
->不安全指针
它返回一个指向void的UnsafePointer,因为它应该这样做。(在Objective-C中,它返回一个
常量void*

然而,dict是一个不安全的指针,而不是它应该是的字典

不,不是“应该这样”。看看宣言:

func CFArrayGetValueAtIndex(theArray: CFArray!, _ idx: CFIndex) 
    -> UnsafePointer<Void>
func CFArrayGetValueAtIndex(数组:CFArray!,ux:CFIndex)
->不安全指针


它返回一个指向void的UnsafePointer,因为它应该这样做。(在Objective-C中,它返回一个
const void*

请问您为什么在CFArray世界工作?CFArray桥接到NSArray,NSArray桥接到Swift阵列。如果你刚过那座该死的桥,这会容易得多!我想当我说“然而,dict是一个不安全的指针,而不是它应该是一个字典”时我并不清楚。我的意思是,虽然它返回一个指针,但指针指向一个字典,这就是我想要访问的字典(在Obj-C版本中,他们能够将指针定义为CFDictionaryRef,但我不能这么做)。关于我为什么在CFArray世界工作:实际上我不确定。。。我想我应该尝试在那里转换数组而不是指针,稍后我会尝试转换并让您知道。转换方式:let attachmentsArray=unsafeBitCast(CMSampleBufferGetSampleAttachmentsArray(buffer,0),[AnyObject].self)不确定这是否是正确的做法,而且它似乎已将数组变为不包含任何内容而不是可选内容({DependsOnOthers=0;}),因此我也不确定这是否好。然而,由于它仍然没有持有的关键,我想我不需要担心它。谢谢你的建议。“我想我应该尝试转换数组”没有什么可转换的。正如我已经说过的,CFArray是一个NSArray,它连接到Swift数组,现在你说的是纯Swift。有点困惑。好吧,CFArray类型与NSArray不同。您是如何将CFArray变成NSArray的?我可以问一下您为什么在CFArray领域工作吗?CFArray桥接到NSArray,NSArray桥接到Swift阵列。如果你刚过那座该死的桥,这会容易得多!我想当我说“然而,dict是一个不安全的指针,而不是它应该是一个字典”时我并不清楚。我的意思是,虽然它返回一个指针,但指针指向一个字典,这就是我想要访问的字典(在Obj-C版本中,他们能够将指针定义为CFDictionaryRef,但我不能这么做)。关于我为什么在CFArray世界工作:实际上我不确定。。。我想我应该尝试在那里转换数组而不是指针,稍后我会尝试转换并让您知道。转换方式:let attachmentsArray=unsafeBitCast(CMSampleBufferGetSampleAttachmentsArray(buffer,0),[AnyObject].self)不确定这是否是正确的做法,而且它似乎已将数组变为不包含任何内容而不是可选内容({DependsOnOthers=0;}),因此我也不确定这是否好。然而,由于它仍然没有持有的关键,我想我不需要担心它。谢谢你的建议。“我想我应该尝试转换数组”没有什么可转换的。正如我已经说过的,CFArray是一个NSArray,它连接到Swift数组,现在你说的是纯Swift。有点困惑。好吧,CFArray类型与NSArray不同。您是如何将CFArray变成NSArray的?我可以问一下您为什么在CFArray领域工作吗?CFArray桥接到NSArray,NSArray桥接到Swift阵列。如果你刚过那座该死的桥,这会容易得多!我想当我说“然而,dict是一个不安全的指针,而不是它应该是一个字典”时我并不清楚。我的意思是,虽然它返回一个指针,但指针指向一个字典,这就是我想要访问的字典(在Obj-C版本中,他们能够将指针定义为CFDictionaryRef,但我不能这么做)。关于我为什么在CFArray世界工作:实际上我不确定。。。我想我应该尝试在那里转换数组而不是指针,稍后我会尝试转换并让您知道。转换方式:let attachmentsArray=unsafeBitCast(CMSampleBufferGetSampleAttachmentsArray(buffer,0),[AnyObject].self)不确定这是否是正确的做法,而且它似乎已将数组变为不包含任何内容而不是可选内容({DependsOnOthers=0;}),因此我也不确定这是否好。然而,因为它仍然没有持有的关键,我想我不需要