Создать поток с точкой входа Swift из функции C в iOS - PullRequest
1 голос
/ 08 июля 2020

Можно ли создать поток с точкой входа Swift из функции C в iOS? Например, используя gcd или POSIX threading API (не уверен, можно ли это использовать в приложении iOS или нет) и указав сигнатуру функции для функции Swift?

Я не пытаюсь решить укажите здесь проблему c, но мне любопытно узнать о практических ограничениях Swift и C взаимодействия в iOS. Кажется, что Apple обеспечивает бесшовную кросс-совместимость, соединяющую Swift с C, но я мало что нашел в обратном направлении.

1 Ответ

1 голос
/ 14 июля 2020

Вы можете получить доступ к механизмам многопоточности POSIX в Swift. У меня есть несколько примеров работы с C в этом проекте и this в другом хобби-проекте. Надеюсь, они будут вам полезны.

При работе с такими вещами, как pthread_create, вы захотите передать либо функцию Swift, либо замыкание в качестве аргумента указателя функции. Я попытался перейти от Swift => C и, имея C, запустить поток с помощью функции Swift через @_cdecl, не смог заставить его работать. Возможно, это возможно, но из-за того, как я все настроил, в данном случае я не смог этого добиться. способ вернуться. Обычно это делается с помощью void* в качестве указателя контекста. Из Swift вы, вероятно, захотите передать UnsafePointer, которым вы управляете, или использовать Unmanaged<T>, чтобы напрямую передать экземпляр класса, который у вас есть, в C и обратно в Swift.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...