Как Objective-C может вызывать методы Swift? - PullRequest
1 голос
/ 12 июня 2019

С добавленным заголовком Swift для проекта Objective-C может получить доступ к методам класса Swift.Как Objective-C может вызывать методы Swift, но C не может без работы с проблемой искажения имени?

Не могли бы вы предоставить подробности об этом?


Не стабильный SwiftABI, значит, компилятор генерирует фиксированные искаженные имена для типов?Тогда можем ли мы иметь программу для прохождения исходного кода Swift и генерирования заголовка с искаженными именами, который можно вызывать из C?

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Магия компилятора, включенная атрибутом @objc.Когда вы помечаете метод, протокол, класс или переменную как @objc, компилятор фактически сгенерирует функцию (ы) thunk или заглушки с соответствующим целевым селектором и именем C, чтобы он мог быть вызван целевым временем выполнения C и чтоЗатем thunk вызовет основную функцию Swift.Обратите внимание, что Swift dispatch и Object message send - это две совершенно разные вещи;это не только имена методов, но и способ поиска указателей на функции (v таблица для swift, строковые селекторы для objc c) и передачи параметров.Чтобы это произошло, компилятор проделывает большую работу за кулисами, включая привязку параметров к языкам (от NSString до String и т. Д.).

0 голосов
/ 12 июня 2019

для вызова быстрых функций в качестве функций Objective C добавьте

@objc

перед функцией

...