На данный момент нет надежного способа сделать это. См. Комментарий разработчика Apple по https://devforums.apple.com/thread/227425
В настоящее время Swift не имеет особого подхода к самоанализу.
Есть некоторые самоанализ машины, которая используется для игровых площадок. Я не знаю, предназначен ли это для API.
Некоторые методы и переменные Swift можно исследовать с помощью самоанализа во время выполнения Objective-C. Это, вероятно, будет лучшим решением сегодня.
У Свифта действительно есть понятие метатипа, несколько аналогичное типу класса в Objective C. Вы можете найти его, используя TypeName.self
, например:
class Foo {
@required init() {
}
}
var normalFoo : Foo = Foo()
var fooType : Foo.Type = Foo.self;
var fooFromMetatype : Foo = fooType();
Возможно, по времени выпуска Метатипы будут включать в себя больше способностей к самоанализу. Я предлагаю подать запрос на функцию радара для этого.
Используйте -Wshadow.
Кстати, ни -W, ни -Wall не включают -Wshadow.
Приятно, когда компилятор помогает избежать подобных проблем, но это помогло в этом даже нет необходимости, если вы используете соглашения, которые помогают избежать его создания в первую очередь, например, зарезервировать имена формы x_
для переменных-членов, а не для локальных переменных.
FWIW У меня не было бы этой проблемы, потому что я использую соглашение об именах, чтобы отличать данные-члены от локальных переменных: идентификаторы данных-членов всегда имеют префикс m_
.
Мы используем эти бородавки в начале имен - a_ аргумент d_ элемент данных s_ статические данные в классе f_ статические данные в файле
... и никакой бородавки для локальных переменных.
Поистине, книга Лакоса - ваш друг.