[БЕЗ_ЗВУКА] Привет! В этом видео мы поговорим об основных типах языка Swift и о том, как с ними работать. Но перед тем как начать эту работу, необходимо объявить переменную или константу, в которой будет содержаться значение какого-то типа. Для этого используются ключевые слова var или let для объявления переменных или констант соответственно. Чтобы выделить память и начать работу с некой переменной или константой, необходимо указать ключевое слово, var или let, имя этой переменной, опционально указать ее тип и можно присвоить изначальное значение. Нужно заметить, что Swift является строго типизированным языком. Поэтому, однажды объявив переменную с целочисленным типом, присвоить строку к ней у нас уже никогда не получится. Это позволяет избежать очень многих ошибок еще на этапе программирования и компиляции. Также стоит заметить, что константе не обязательно указывать изначальное значение сразу же. Его можно объявить и позже. Главное, чтобы оно было там в момент первого использования и указывалась всего лишь один раз при любом истечении обстоятельств. Swift позволяет работать нам с вложенными типами. Можно объявить переменную или константу внутреннего типа без создания инстансов внешнего типа. Для доступа к вложенным типам используется дот нотации, или нотация через точку Для именования констант и переменных можно использовать практически любые Unicode-символы. Нельзя лишь начинать это имя с цифры, оно не должно в себе содержать непечатаемые символы, математические символы, стрелки, а также приватные unicode-символы. Хоть у вас и есть возможность объявить имя переменной, которая состоит только из эмодзи, делать мы этого очень не рекомендуем. Это поможет как вам при дальнейшей работе с вашим кодом, так и другим людям, которым придется с ним работать. Рекомендуется называть все переменные и константы английскими именами в lowerCamelCase. Для работы с целочисленными значениями в Swift предусмотренные типы int и Uint для работы со знаковыми и беззнаковыми целочисленными значениями соответственно. Они будут иметь 32 или 64 бита в зависимости от платформы, на которой исполняется код. Если же вам необходимо точно знать, с какой длины значением вы работаете, то можно использовать типы вроде int8, int16, int32, int64 и их аналоги для беззнакового целочисленного значения. Рекомендуется их использовать, только если мы работаем с каким-то специфичным сетевым протоколом или же на низком уровне, близко к железу. Предпочтительно всегда использовать типы int и Uint. Это позволит избежать многих ошибок и улучшит конвертацию. Для работы со значениями с плавающей точкой предусмотрены типы float и double. Float является 32-разрядным значением, обеспечивающим точность в шесть знаков после точки. Double является значением с плавающей точкой двойной точности, которая позволяет обеспечить точность в 15 знаков после точки. Эти типы отлично подходят для хранения чисел, точность представления которых не является критичной, например, координаты некоторого объекта. Но если вы работаете с такими важными данными, как цены, рекомендуется использовать другой тип, decimal, о котором мы будем говорить в дальнейших видео. Как и во множестве других языков программирования, операции со значениями с плавающей точкой не являются точными. Можно рассмотреть простейший пример, сравнив литералы 0.3 и сумму литералов 0.1 и 0.2. Эти значения не будут равны. О том, как правильно сравнивать значения с плавающей точкой, вы ознакомитесь в материалах для самостоятельного изучения. Для хранения логического типа используется тип bool. В отличие от C, objective C и других языков, логический false не является эквивалентом 0, а любое другое значение эквивалентом true. Соответственно, мы не можем передать целочисленное значение как условие оператора if. Далее мы рассмотрим Tuple, или Кортеж. Ранее мы использовали три перемены, чтобы объединить какие-то схожие данные, однако куда удобнее использовать для этого Tuple. Мы можем объявить координаты объекта, объявив Tuple с тремя элементами и именуя каждый из них координатами X, Y и Z соответственно. Теперь мы можем объявить переменную, всего лишь передав эти три значения, а обращаться к каждой из них по имени. Именовать каждый из элементов Кортежа совершенно необязательно, можно обращаться к ним по индексу. Также Кортеж может содержать элементы абсолютно разных типов. Для работы со значениями, которых в каких-то случая может не быть, используется optional-тип, мы легко можем конвертировать строку с символами 1, 2, 3 в целочисленное значение 123, но такое не пройдет со строкой, в которой содержится фраза Hello world. Именно поэтому конструктор целочисленного значения со строкой возвращает нам optional-тип, в котором может содержаться либо число, которое нам удалось распарсить из данной строки, либо же nil. nil является ключевым словом, которое обозначает отсутствие значения для некоторой переменной. nil нельзя присвоить любой переменной. Его можно присвоить только той переменной или константе, тип которой объявлен как optional. Для работы с optional-значениями необходимо проверять, находится ли в них какое-то значение. Для этого можно сравнить эту переменную или константу с nil. Если же проверка не удалась, значит, значение присутствует, и мы можем безопасно к нему обращаться. Для распаковки переменной, unwrapping, используется оператор восклицательный знак, указываемый после переменной или константы. Если же в переменной в данный момент содержится nil, то произойдет exception, и выполнение нашей программы будет закончено. Использование оператором восклицательного знака, или Force unwrap, крайне не рекомендуется. Это небезопасно, затрудняет чтение и зачастую приводит к ошибкам. Для этого лучше использовать эквивалентный оператор if let, где мы сразу же в операторе ветвления можем создать новую переменную, в которой будет уже содержаться не optional-значение. Если же в переменной или константе содержался nil, то тело условия выполнено не будет. В этой лекции мы узнали, как объявлять константы и переменные, как поступать в тех случаях, когда переменная может не иметь никакого значения, а также узнали об основных типах, с которыми мы будем работать в течение всей разработки на языке Swift.