如何在Swift 3中编写CoreMidi MIDISendSysex请求?

时间:2017-03-27 22:29:07

标签: swift coremidi

我收到了错误。

  

无法转换类型'() - >的值()'输入' MIDICompletionProc'   (又名' @convention(c)(UnsafeMutablePointer) - >   ()')在胁迫中。

其他一切看起来都不错但是对于我的生活,我似乎无法组成CompletionProc函数调用。

    var mySysExSendRequest : MIDISysexSendRequest
    let myCompProc = sysexCompletionProc (a separate static function)

    mySysExSendRequest = MIDISysexSendRequest(destination: Dest,
                                                  data: dataptr,
                                                  bytesToSend: 16,
                                                  complete: complete,
                                                  reserved: res,
                                                  completionProc: sysexCompletionProc as MIDICompletionProc,
                                                  completionRefCon: nil)

    MIDISendSysex(&mySysExSendRequest)

1 个答案:

答案 0 :(得分:1)

您目前正在提供不带参数的函数,即() -> Void

您的完成程序必须具有此签名:

(UnsafeMutablePointer<MIDISysexSendRequest>) -> Void

另请注意,由于proc必须与@convention(c)语义兼容,因此它不能是类方法或闭包。

可以通过在self字段中传递指向completionRefCon的指针,然后在回调中将其反转(使用&#34;不安全&#34;方法)来解决该限制