关于如何使用Swift 2@convention(c)类型注释,有哪些具体示例?

关于如何使用Swift 2@convention(c)类型注释,有哪些具体示例?,swift,swift2,Swift,Swift2,我似乎无法让Xcode 7(beta版)接受我使用Swift 2@convention(c)类型注释?有人能提供一些语法正确的@convention(c)用法示例吗?除非您正在编写混合应用程序,其中Objective-c需要调用您的Swift代码,否则您不需要@convention(c) 以下是两个Swift方法声明: func blockTaker(f:()->()) {} func functionTaker(f:@convention(c)() -> ()) {} Objec

我似乎无法让Xcode 7(beta版)接受我使用Swift 2
@convention(c)
类型注释?有人能提供一些语法正确的
@convention(c)
用法示例吗?

除非您正在编写混合应用程序,其中Objective-c需要调用您的Swift代码,否则您不需要
@convention(c)

以下是两个Swift方法声明:

func blockTaker(f:()->()) {}
func functionTaker(f:@convention(c)() -> ()) {}
Objective-C将第一个视为使用Objective-C块,第二个视为使用指向函数的C指针


这就是
@convention(c)
所带来的区别。

非常有趣:)我听说过这个“谷歌”的东西,并且真的去了那里。请给我看一两页中的一个站点,它实际上符合我的要求——这是一个使用方法的例子。Kametrixom——当你使用
func
关键字定义函数时,你能使用它吗(@convention(c))?@ChrisMarkle我想你不能,但这并不重要,因为闭包是一个函数,在各个方面都像一个函数。对不起,这个笑话;)我试图定义此回调以呈现给VTCompressionSessionCreate()并得到一个错误。为什么呢<代码>让回调:@convention(c)(a:UnsafeMutablePointer,b:UnsafeMutablePointer,c:OSStatus,d:vtcodecodeinfoflags,e:CMSampleBuffer?->Void={return}我得到的错误是:
。。。错误:元组类型“(a:UnsafeMutablePointer,b:UnsafeMutablePointer,c:OSStatus,d:VTEncodeInfoFlags,e:CMSampleBuffer?)和“()”具有不同数量的元素(5对0)
@ChrisMarkle您提供的闭包
{return}
具有类型
Void->Void
。您应该添加参数:
{a,b,c,d,e in}
(编译器在返回时崩溃)@Kametrixom的回复中
@convention(c)
的用法是什么?我不知道您的意思。我已经回答了这个问题。我说的,我说的。从这里开始。好的@matt,但你注意到,
@convention(c)
的区别在于它将函数定义为“将c指针指向函数”,但我不认为这是在@Kametrixom answer中的let语句中使用它的意思。你想什么,你想什么。我说了,我说了。你总是有整洁的答案@matt。谢谢你
func blockTaker(f:()->()) {}
func functionTaker(f:@convention(c)() -> ()) {}