【发布时间】:2015-06-09 18:58:25
【问题描述】:
迁移到 Swift 2 后,我遇到了这个问题,错误提示我现在应该使用 @convention(c) (T) -> U。我已经尝试了排列,但到目前为止没有运气。
func foo(context: AnyObject?, width: CGFloat) -> Int {
}
let bar = unsafeBitCast(foo, CFunctionPointer<(UnsafeMutablePointer<Void>, Float) -> Int>.self)
【问题讨论】:
-
我认为应该可以完全避免 unsafeBitCast。你能提供更多信息吗? C 函数是如何声明的,作为上下文对象传递的是什么,...?
-
这也可能有助于通过 C 回调传递对象指针:stackoverflow.com/questions/30786883/…。
-
CGFloat与Float不同。在 64 位平台上(即过去几年的所有 Apple 设备)它是Double,而在 32 位平台上它是Float。然而,在 Objective-C 中CGFloat只是一个普通的 Ctypedef,所以你应该在这里使用CGFloat。