Когда использовать статическую константу и переменную в Swift?
==============================================================

Есть несколько постов о том, как написать код для`static constant` а также`static variable` в Свифте. Но не понятно когда использовать`static constant` а также`static variable` скорее, чем`constant` а также`variable`, Может кто-нибудь объяснить?

Это более важный комментарий:

Интересные наблюдения:

**Первый:**

не создает конфликтов.

**Во-вторых:**

Вы никогда не можете использовать переменные экземпляра внутри статических переменных. Вы можете использовать статические переменные внутри**функции экземпляра** **если** вы ссылаетесь на него, ставя перед ним префикс типа т.е.`Person.name`, в то время как

статические переменные могут быть доступны**внутри статика** функции с или без префикса типа, т.е.`Person.staticName` или же`staticName` обе работают.



Есть несколько постов о том, как написать код для статической константы и статической переменной в Swift. Но не ясно, когда использовать статическую константу и статическую переменную, а не постоянную и переменную. Может кто-нибудь объяснить? Когда вы определяете статический var / let для класса (или структуры), это значение будет общим для всех экземпляров (или значений).

статические переменные / класс - это переменные, к которым можно обращаться без необходимости создания какого-либо экземпляра / объекта.

Я думаю, что вы знаете разницу между константой и переменной. Короче говоря, константа - это то, чье значение никогда не меняется; numberOfEyes в приведенном выше примере и переменная - это то, чье значение изменяется; eyeDefect в приведенном выше примере.

статическая константа или переменные помещаются в память (RAM) отдельно от объектов. то есть, у numberOfEyes выделено другое пространство памяти, чем у объекта John, его нет внутри John.

Теперь, когда использовать статические константы / переменные:

Когда вы используете шаблон проектирования синглтона: static let sharedInstance = APIManager ()

Когда вам нужно значение чего-либо, что является глобально одинаковым, без необходимости создавать экземпляр класса, под которым он определен, как numberOfEyes в человеческом классе.

Использование статических переменных / констант не очень рекомендуется из-за проблем с памятью, потому что как только он создан / назначен, он остается в памяти, пока ваше приложение не будет удалено из памяти. До сих пор я обнаружил, что лучшее место для использования статических переменных / констант - только при создании одноэлементного шаблона, а иногда указатели на другие нормальные переменные и константы не используют статические, потому что: из-за проблемы с памятью будет сложно запустить модульное тестирование в вашем коде со статическими переменными / константами. Не рекомендуется использовать так же, как в классе людей. вместо этого используйте их как просто константу или переменные и обращайтесь к ним, создавая экземпляр.



Статические константы и переменные принадлежат самому классу, а не конкретному экземпляру. У класса также могут быть статические методы, которые можно вызывать без создания экземпляра класса.

Поэтому, когда у вас есть класс`MyClass` со статической переменной`x`Вы также можете получить к нему доступ через`MyClass.x` непосредственно.`x` будет использоваться всеми экземплярами класса