2017-01-24 2 views
9

Что-то вроде objc_getClassList, но для структур.Способ получения всех типов структуры в среде выполнения Swift-3?

Просто для того, чтобы дать некоторый контекст: этот метод (для классов) используется в наших модульных тестах для проверки того, что для всех классов с определенным суффиксом есть тесты для них. Мы тестируем тесты!

+1

Насколько я знаю, структуры не существуют во время выполнения. Это всего лишь способ сообщить компилятору, как обрабатывать связанные данные, которые сгруппированы вместе. В большинстве случаев (т. Е. Когда не используется полиморфизм протокола) методы полностью встроены, и нет необходимости в каких-либо знаниях времени выполнения существующей структуры – Alexander

+0

@Alexander, и если все структуры соответствуют одному протоколу? Есть подсказки, что вы можете использовать 'Зеркало (отражающее: Protocol.self) .children' в какой-то момент времени, но в текущей версии Swift массив пуст. http://stackoverflow.com/questions/35125708/how-to-list-swift-types-that-conform-to-protocol-using-reflection –

+0

Протоколы также не могут быть скомпилированы. Если у компилятора есть достаточная информация, чтобы иметь возможность статически отправлять все методы протокола, нет причин для его существования во время выполнения. – Alexander

ответ

1

Компилятор Swift в основном испускает достаточное количество метаданных, чтобы сделать это отражение сегодня, но оно не отображается. Полное отражение верности относится к «списку вещей, которые мы хотели бы сделать», но еще не реализовано.

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