当前位置: 首页 > 面试题库 >

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

韩刚洁
2023-03-14
问题内容

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

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

}

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

问题答案:

您不再需要在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调用约定。



 类似资料:
  • Templates for Naming Convention There are only two hard things in Computer Science: cache invalidation and naming things-- Phil Karlton Naming convention is a set of rules for choosing the character s

  • http://jamesonquave.com/blog/take-control-of-the-iphone-camera-in-iOS-8-with-swift-part-1/ 我听说Swift2现在有了不同的错误处理方法,所以我猜这部分代码需要更改。但我不知道怎么做。有人能帮我做这个吗?谢了!

  • 问题内容: 如何使用node.js中的C ++库? 问题答案: 看一下node-ffi。 node-ffi是一个Node.js插件,用于使用纯JavaScript加载和调用动态库。它可用于创建与本机库的绑定,而无需编写任何C ++代码。

  • 问题内容: 我正在迁移课程,以便对Swift进行一些培训。我通过桥接头成功使用了Objective- C代码,但是我需要导入一个包含指令的常量文件。 我在结合Swift和Cocoa和Objective-C(简单宏)中看到以下内容: 简单宏 通常在C和Objective-C中使用指令定义原始常量的地方,在Swift中使用全局常量代替。例如,常数定义可以在Swift中使用更好地表达。由于简单的类似于常

  • 本文向大家介绍C#中的Lazy如何使用详解,包括了C#中的Lazy如何使用详解的使用技巧和注意事项,需要的朋友参考一下 前言 延迟初始化 是一种将对象的创建延迟到第一次需要用时的技术,换句话说,对象的初始化是发生在真正需要的时候才执行,值得注意的是,术语  延迟初始化 和  延迟实例化 的意思是相同的——可以互换使用,通过使用  延迟初始化 技术,可以避免应用程序不必要的计算和内存消耗,这篇文章我

  • 问题内容: 在新的Go语言中,如何调用C 代码?换句话说,如何包装我的C 类并在Go中使用它们? 问题答案: 更新: 我已经成功地将一个小型测试C ++类与Go链接在一起 如果您使用C接口包装C ++代码,则应该可以使用cgo调用您的库(请参阅中的gmp示例)。 我不确定C ++中的类概念是否真的可以在Go中表达,因为它没有继承。 这是一个例子: 我有一个C ++类定义为: 我想在Go中使用。我将