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