Читайте также:
|
|
- Мы видели, что быстрые требования, что наши переменные и константы, приведенные осмысленные значения, прежде чем они привыкли. И мы видели несколько способов, чтобы убедиться, что это происходит в наших классах. Либо с инициализаторах или путем предоставления ценностей в декларации об имуществе, что я делаю здесь. Иногда, расчета этих начальных значений, как только экземпляр объекта не лучшее использование наших приложений времени. Представьте себе, в нашем классе, что у нас есть свойство, называемое бонус. И иногда мы будем использовать это свойство, а иногда и мы не будем.Проблема здесь, что бонус не предоставляется буквальное значение, которое он собирается получить его значение из другой функции под названием getDailyBonus в моем примере здесь, что мы можем считать потребности, чтобы сделать некоторые комплексной переработки, чтобы понять это.
Ладно, это действительно просто генерации случайного числа, но давайте представим, это должно выйти к сети или получить значение из некоторого нетривиального вычисления.Дело в том, когда я создаю экземпляр этого класса, что произойдет в том, что Swift будет идти вперед и инициализировать все эти свойства уровня экземпляра, и это будет причиной того, что функция будет называться я могу даже видеть результаты, что на детской площадке здесь. Я вижу, что этот новый объект, который был создан действительно есть, что данные внутри него. Я действительно не нужно вызывать эту функцию, если я не нужен доступ к этим свойством.
Один из способов, это я мог бы сделать это по желанию, используя знак вопроса я мог определить бонус в виде дополнительного Int. Тогда начнем добавлять некоторую логику к нему так, что, когда мне нужно получить доступ, это свойство проверить его за то, что ноль, и если он равен нулю, то мы пойдем выбирать это значение. Но другой способ, более простой способ, что у Свифта мы можем сделать это ленивый собственности. С ленивой собственности мы описываем начальное значение так же, как мы бы нормально, но Свифт не будет беспокоить на самом деле инициализации недвижимость пока кто-то не попытается получить к нему доступ.
И это невероятно легко, все, что я сделать, это добавить слово ленивый до нашей вар декларации. Теперь обратите внимание на немедленное разницу без слова ленивый. Когда я экземпляра объекта, я могу видеть результаты здесь, что эта функция вызывается, она выводит эту печатать строку в верхней генерирует случайное число. Но если я ставлю это слово ленивый назад перед ней вызов функции исчезает это не происходит прямо сейчас.Объект описания себя как имеющие имя John Doe, ноль баллов и бонус в настоящее время равна нулю.
Но в отличие от обязательно, я не придется беспокоиться об этом бонус бытия ноль, у меня нет, чтобы проверить его за то, что ноль, у меня нет, чтобы развернуть его. Потому что как только я пытаюсь получить доступ к ленивый собственность, я просто хочу, чтобы сделать это, как только это экземпляр я собираюсь идти вперед и распечатать все newPlayer.bonus является то, что собирается вызвать Свифт сразу инициализировать его он будет вызывать функцию, она получит значение, и он вернется, как если бы это имело значение все вместе. Он всегда будет иметь значение, если я пытаюсь его использовать.
Одна последняя вещь, чтобы отметить, ленивые свойства всегда переменные. Это всегда ленивый Вар, это ошибка компиляции, если вы попробуете и сказать ленивый аренду. Это потому, что под капотом, состояние этой части данных на самом деле меняет может начаться нуля и потом дать значение. Это не будет разрешено с константой, должна быть предоставлена установленное значение, как только объект инициализирован.
Дата добавления: 2015-08-20; просмотров: 165 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Defining lazy properties | | | Adding property observers |