2016-03-16 2 views
1

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

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

+0

Когда вы хотите проверить, все ли они установлены? – ColGraff

+0

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

+0

Не могли бы вы рассказать нам, зачем вам это нужно? Есть, вероятно, лучшие решения. – Sulthan

ответ

1

Вы не можете сделать это.

Проблема заключается даже в получении списка всех свойств, поскольку Swift не имеет отражения.

Однако, если вы можете наследовать свои объекты от NSObject, вы можете использовать среду выполнения Obj-C для этого (с некоторыми ограничениями).

-1

Свойства необязательного типа автоматически инициализируются значением nil, что указывает на то, что свойство во время инициализации намеренно предназначено для «еще не значения». Поэтому просто проверьте, нет ли дополнительного свойства, чтобы узнать, установлено ли оно.

+0

Я считаю, что автор знает, как работают опции. Скорее он спрашивает, как он может сразу проверить все варианты в классе, даже если их очень много. – ColGraff

+0

Да, просто проверьте для нуля один за другим, см. Выше –

0

можно определить хранимую свойству

var allPropertiesAreInitialised: Bool{ 
     get { 
      return val1 =! nil && val2 =! nil //etc ... 
     } 
} 
+0

Нехорошо, это решение не масштабируется. –

+0

Отлично, учитывая, что проверка всех свойств не равна нулю, не зная, что все свойства довольно бессмысленны. Вы предполагаете, что класс или структура никогда не сможет получить свойство с нулевым значением. – gnasher729