一尘不染

Swift 2中的新@convention(c):如何使用?

swift

迁移到Swift 2后,出现了一个错误,指出我现在应该使用@convention(c)(T)->U。我已经尝试了排列,但到目前为止还没有运气。

func foo(context: AnyObject?, width: CGFloat) -> Int {

}

let bar = unsafeBitCast(foo, CFunctionPointer<(UnsafeMutablePointer<Void>, Float) -> Int>.self)

阅读 429

收藏
2020-07-07

共1个答案

一尘不染

您不再需要在Swift
2中创建CFunctionPointer。相反,您可以通过调用Convention(在这种情况下为)来注释您的类型c,并直接使用它。

typealias CFunction = @convention(c) (UnsafeMutablePointer<Void>, Float) -> Int
let bar = unsafeBitCast(foo, CFunction.self)

The Swift Programming Language@convention的Type
Attributes部分中的描述的相关位是:

c参数用于指示C函数引用。函数值不包含上下文,并且使用C调用约定。

2020-07-07