Objective c 在Swift中使用对CFPropertyListRef的引用

Objective c 在Swift中使用对CFPropertyListRef的引用,objective-c,swift,pointers,reference,core-foundation,Objective C,Swift,Pointers,Reference,Core Foundation,我目前正在将一些Objective-C代码转换为swift,我被卡住了。 我有一个内部API,它填充CFPropertyList并返回其格式 MyFunction(CFPropertyListRef list, CFPropertyListFormat *fmt); 在Objective-C中,我通过 CFDictionaryRef myList; CFPropertyListFormat fmt; MyFunction(&myList, &fmt) 通过“生成接口”,我可以

我目前正在将一些Objective-C代码转换为swift,我被卡住了。 我有一个内部API,它填充CFPropertyList并返回其格式

MyFunction(CFPropertyListRef list, CFPropertyListFormat *fmt);
在Objective-C中,我通过

CFDictionaryRef myList;
CFPropertyListFormat fmt;
MyFunction(&myList, &fmt)
通过“生成接口”,我可以看到swift转换为

MyFunction(_ list: CFPropertyList!, _ fmt: UnsafeMutablePointer<CFPropertyListFormat>))
我得到了一个EXC\u坏访问。 由于编译器没有抱怨类型,我认为这应该是正确的。 非常感谢您的帮助!
谢谢

如果您在Objective-C中的用法是正确的,那么您的
MyFunction
的函数头应该是这样的:

extern void MyFunction(CFPropertyListRef *list, CFPropertyListFormat *fmt);
CFPropertyListRef
实际上只是Objective-C/C中的
void*
的类型别名。因此,编译器很少为许多可能的类型错误使用输出警告。)

和Swift 2导入以下功能:

public func MyFunction(list: UnsafeMutablePointer<Unmanaged<CFPropertyList>?>, _ fmt: UnsafeMutablePointer<CFPropertyListFormat>)
public func MyFunction(列表:UnsafeMutablePointer,fmt:UnsafeMutablePointer)
因此,假设您已经如上所述更改了函数头, 您需要按如下方式使用它:

var fmt: CFPropertyListFormat = .XMLFormat_v1_0
var umPlist: Unmanaged<CFPropertyList>? = nil
MyFunction(&umPlist, &fmt)
var plist = umPlist?.takeRetainedValue() //or this may be `umPlist?.takeUnretainedValue()`
var fmt:CFPropertyListFormat=.XMLFormat\u v1\u 0
变量列表:非托管?=无
MyFunction(&umPlist,&fmt)
var plist=umPlist?.takeRetainedValue()//或者这可能是'umPlist?.takeUnrepainedValue()`
var fmt: CFPropertyListFormat = .XMLFormat_v1_0
var umPlist: Unmanaged<CFPropertyList>? = nil
MyFunction(&umPlist, &fmt)
var plist = umPlist?.takeRetainedValue() //or this may be `umPlist?.takeUnretainedValue()`