语法上的甜蜜快速回调来自c

时间:2015-12-14 00:41:29

标签: c swift swift2 ffi

我正在学习斯威夫特。我有一个C接口回调Swift-2代码:

let inputProc: @convention(c) (UnsafeMutablePointer<Void>, UnsafeMutablePointer<AudioUnitRenderActionFlags>, UnsafePointer<AudioTimeStamp>, UInt32, UInt32, UnsafeMutablePointer<AudioBufferList>) -> OSStatus = {
    (inRefCon, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData) in

    // do things here

    return noErr
}

它有效,但很难看,我编写这种代码的过程非常尴尬:我复制回调的声明,添加= { (a, b, c, d, e) in然后我替换a, b, c s当我发现他们的类型时,名字更好的元组。

有什么方法可以让回调参数名称更接近他们的类型?
通过写let inputProc = @convention(c) (inRefCon: UnsafeMutablePointer<Void>, ...)并让类型推断排序出去来说?我猜测语法的尝试失败了。

Dan Beaulieu提出了使用typealias的好建议。幸运的是,已经存在一个,我的代码变得更容易看:

let inputProc: AURenderCallback = {
    (inRefCon, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData) in

    return noErr
}

但现在参数类型比以往更神秘(尽管只有一个选项 - 点击即可)。我开始怀疑我实际上不能使用好的,本地化的参数声明进行c-callback,这将使typealias成为最佳解决方案。

0 个答案:

没有答案