2015-01-26 3 views
2

Можно ли передать закрытие из программы Swift в API, где соответствующий аргумент помечен как CFunctionPointer?Конвертировать быстрое закрытие на CFunctionPointer?

Я попадались показаний (например here), что это не было возможно с (теперь устаревшим) бета-версии Xcode 6.

Однако, вы не можете вызвать указатель на функцию C или преобразовать замыкание to C функция указатель типа.

Возможно ли это сейчас, и если да, то как?

Например, как можно определить замыкание в Swift, которое будет принято как AudioServicesSystemSoundCompletionProc в вызове AudioServicesAddSystemSoundCompletion?

This Ответ использует как Swift, так и Objective-C, чтобы прийти к решению. Возможно ли это с классом Swift?

+0

Возможный дубликат [Objective-C Wrapper для CFunctionPointer для быстрого закрытия] (http://stackoverflow.com/questions/26138658/objective-c-wrapper-for-cfunctionpointer-to-a-swift-closure) –

ответ

4

Нет, еще не возможно с Swift.

Однако вы не можете вызвать указатель функции C или преобразовать замыкание в C указатель функции функции C.

По-прежнему действует и обновляется. Невозможно определить или преобразовать замыкание в функцию C в Swift. Вы можете ссылаться только на уже определенные функции C.

+0

Не могли бы вы привести цитату из текущей части документации Apple, чтобы поддержать это. (Тогда я приму ответ.) – Drux

+0

В принципе, «Однако вы не можете вызвать указатель функции C или преобразовать замыкание в тип указателя функции C.» все еще действует. – Kirsteins

Смежные вопросы