2015-08-06 2 views
6

У меня возникли проблемы с созданием чего-то в чистом Свифт. Я пытаюсь реализовать реестр классов, подобных NSValueTransformer.Существует ли бычный эквивалент GCC `__attribute __ ((constructor))`?

В Objective-C я гарантировал бы, что подклассы NSValueTransformer были зарегистрированы, вызвав setValueTransformer:forName: в методе класса load подкласса. Этот подход не работает в Swift, потому что время выполнения не вызывает load в классах Swift.

Моя следующая идея состояла в том, чтобы найти Swift версию __attribute__((constructor)), но мой поиск закрылся. Имеет ли Swift что-то вроде __attribute__((constructor)) или это единственный способ добиться этого, чтобы написать функцию C, которая вызывает функцию Swift?

+0

У вас есть решение по вашему вопросу? У меня тоже есть аналогичная потребность. заранее спасибо –

ответ

0

Если ваш реестр классов завернут в пакет, то вы можете использовать основной класс пакета для поиска и регистрации трансформаторов. Если нет, вы можете использовать приложение AppDelegate, чтобы завершить его, чтобы сделать это.

В любом случае, вам нужно будет найти все классы и зарегистрировать те, которые вы хотите. Objective-C имеет приятный objc_getClassList(), чтобы выполнить это, для Swift я нашел интересный смысл, который добавляет эту функцию в Swift: https://gist.github.com/bnickel/410a1bdc02f12fbd9b5e

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