将 Swift 闭包转换为 CFunctionPointer?
Posted
技术标签:
【中文标题】将 Swift 闭包转换为 CFunctionPointer?【英文标题】:Convert Swift closure to CFunctionPointer? 【发布时间】:2015-01-26 09:40:23 【问题描述】:是否可以将 Swift 程序中的闭包传递到相应参数已标记为 CFunctionPointer
的 API 中?
我遇到了一些迹象(例如 here),这在 Xcode 6 的(现在已经过时的)beta 版本中是不可能的。
但是,您不能调用 C 函数指针或将闭包转换为 C 函数指针类型。
现在有可能吗?如果可以,怎么做?
例如,如何在 Swift 中定义一个在调用 AudioservicesAddSystemSoundCompletion
时会被接受为 AudioServicesSystemSoundCompletionProc
的闭包?
This answer 使用 Swift 和 Objective-C 来达成解决方案。是否可以单独使用 Swift 类?
【问题讨论】:
Objective-C Wrapper for CFunctionPointer to a Swift Closure的可能重复 【参考方案1】:不,仅使用 Swift 尚无法实现。
但是,您不能调用 C 函数指针或将闭包转换为 C 函数指针类型。
仍然有效并且是最新的。没有办法在 Swift 中定义闭包或将闭包转换为 C 函数。您只能引用已定义的 C 函数。
【讨论】:
您能否引用当前的 Apple 文档来支持这一点。 (那我就接受答案了。) 基本上However, you cannot call a C function pointer or convert a closure to C function pointer type.
仍然有效。以上是关于将 Swift 闭包转换为 CFunctionPointer?的主要内容,如果未能解决你的问题,请参考以下文章