如何在Swift中调用一个带函数指针参数的函数?

时间:2018-02-04 10:55:27

标签: ios swift pointers function-pointers

根据Apple文档:

  

当调用带有函数指针参数的函数时,可以传递顶级Swift函数,闭包文字或nil。

我在Apple文档中试过这个例子:Apple Developer

func customCopyDescription(_ p: UnsafeRawPointer?) -> Unmanaged<CFString>? {
    // return an Unmanaged<CFString>? value
}

var callbacks = CFArrayCallBacks(
    version: 0,
    retain: nil,
    release: nil,
    copyDescription: customCopyDescription,
    equal: { (p1, p2) -> DarwinBoolean in
        // return Bool value
}
)  

但我在Xcode中收到错误消息:(copyDescription:customCopyDescription error)

  

C函数指针只能通过对“函数”的引用形成。或文字闭包

正如苹果文档中所提到的,customCopyDescription可以作为顶级swift函数传递,但它似乎在文档中出现了问题。

如何将customCopyDescription func作为swift函数传递给CFArrayCallBacks(不是封闭文字)?

1 个答案:

答案 0 :(得分:3)

customCopyDescription需要是免费功能,而不是方法。当我将代码复制到Xcode中时,我只在customCopyDescription在一个类中时才收到错误消息,而不是其他。

添加占位符返回值并将customCopyDescription放在文件范围后,代码编译没有问题