我想和無法創建AudioServicesSystemSoundCompletionProc的實例在AudioServicesAddSystemSoundCompletion中使用Xcode中的Swift的參數。如何在Swift中實現AudioServicesSystemSoundCompletionProc?
這裏就是我有這麼遠
func completionCallback(ssID:SystemSoundID,clientData:UnsafeMutablePointer<Void>) -> Void {
}
var foo:(ssID:SystemSoundID,clientData:UnsafeMutablePointer<Void>) -> Void = completionCallback;
AudioServicesAddSystemSoundCompletion(soundID, nil, nil, foo, nil);
我寫這與一些導遊介紹如何編寫斯威夫特同樣的C函數指針的幫助,但是,這將引發此錯誤:
'(ssID: SystemSoundID, clientData: UnsafeMutablePointer<Void>) -> Void' is not convertible to 'AudioServicesSystemSoundCompletionProc'
文檔顯示Objective-C的聲明:
typedef void (*AudioServicesSystemSoundCompletionProc) (SystemSoundID ssID, void *clientData);
這是declar當使用Xcode時顯示:
typealias AudioServicesSystemSoundCompletionProc = CFunctionPointer<((SystemSoundID, UnsafeMutablePointer<Void>) -> Void)>
我不確定如何在Swift中正確實現AudioServicesSystemSoundCompletionProc。
任何進展呢?我找不到一個不使用Obj-C代碼的解決方案,包括David的答案。 – Sean 2015-02-01 21:14:35
[使用Swift CFunctionPointer將回調傳遞給CoreMIDI API](http://stackoverflow.com/questions/25514176/using-swift-cfunctionpointer-to-pass-a-callback-to-coremidi-api) – rickster 2015-02-15 17:21:51