Мы разобрались какие основные типы данных есть у нас есть в языке и как выводить значения в консоль, теперь разберемся как их сохранять в коде, во время выполнения программы. Для этого в языке есть две вещи: переменные и константы.

Объявление констант

Для того что бы использовать в коде константы их нужно объявить. Давайте объявим константы всех известных типов. Это делается следующем образом.

let a: Int // let %имя константы%: %тип константы%
let b: Double
let c: Float
let d: String
let e: Character
let f: Bool

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

Для имен констант можно использовать буквы, цифры и нижнее подчеркивание, есть несколько правил, обязательных и желательных:

let user: Int      // хороше имя
let b: Int         // плохое имя
let 1user: Int     // некоректное имя, приложение не скомпилиируется
let User: Int      // плохое имя
let myuser: Int    // плохое имя, слова сливаются
let my_user: Int   // плохое имя, в iOS разрабоке обычно не используют нижнее подчеркивание для разделения слов
let myUser: Int    // хороше имя

Каждую константу стоит объявлять на отдельной строке, так как это законченное синтаксическое выражение, то код вида let user: Int let b: Int просто не будет компилироваться. Можно указывать несколько выражений в одной строке, отделяя их точкой с запятой: let user: Int; let b: Int, но это считается дурным тоном.

Присвоение значения константе

Мы можем запустить приложение с примерами выше и приложение будет запускаться. Но использовать объявленные константы без присвоено значения нельзя. Давайте просто попробуем вывести константу в консоль и увидим ошибку компиляции (Рис. 1).

Рис. 1

Присвоение значения константе называется инициализацией.

Для того что бы использовать константу, нужно ее инициализировать. Для этого нужно использовать оператор присваивания =(Рис. 2). Он работает очень просто. Берет константу, указанную слева от него и присватает значение указаное справа от него. И да, нельзя поменять их местами. Всегда происходит присвоение того что находится с права, в то что указано слева.

Рис. 2

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

Присваивать значение константе можно только один раз. Если попытаться присвоить значение повторно, то мы получим ошибку компиляции (Рис. 3).

Рис. 3

Объявление и инициализация в одном выражении

В примерах выше, мы отдельно объявляли константы, а затем присваивали им значения. Но можно сделать это все за один раз. И более того, обычно так и делается в коде.

let a: Int = 1
let b: Double = 2.3
let c: Float = 3.14
let d: String = "Привет мир!"
let e: Character = "d"
let f: Bool = true

Обратите внимание, что для присвоения значения константам c и e мы использовали литералы, не смотря на то что их типы Float и Character у которых нет литералов. Это сработало потому что компилятор видит указанный тип константы и может автоматически преобразовать литерал в нужный тип.

Строгая типизация

Swift строго типизированный язык. Это означает что типы всегда совпадать во всем выражении. И нельзя в константу типа Int положить строку или наоборот (Рис. 4). Единственное что компилятор может нам простить это если мы попытаемся сохранить во Float или Double константы целые числа, он автоматически их приведет к нужному типу.

Рис 4.

Более того, такие поблажки с типами возможны только для литералов. Если мы буем присваивать константе зачине другой константы то типы должны совпадать полностью (Рис. 5).

Рис. 5

Автоматический вывод типов

Выше мы писали типы везде. Но swift умеет выводить типы если ему достаточно информации и если мы инициализируем константу сразу присваивая значения то он автоматически выведет ей тип этого значения.

let a = 1               // Int
let b = 2.3             // Double
let c: Float = 3.14     // Float
let d = "Привет мир!"   // String
let e: Character = "d"  // Character
let f = true            // Bool

В примере выше у нас получилось опустить все типы кроме Float и Character. Как раз потому что у них нет своих литералов и если доверить вывод типов компилятору то он будет считать что там Double и String.

То же самое справедливо если инициализировать с помощью других констант.

let a0 = 1
let a = a0               // Int
let b0 = 2.3
let b = b0              // Double
let c0: Float = 3.14
let c = c0              // Float
let d0 = "Привет мир!"
let d = d0              // String
let e0: Character = "d"
let e = e0              // Character
let f0 = true
let f = f0              // Bool

Теперь, как видите, мы даже не указали типы для c и e, потому что c0 и e0 нужного нам типа.

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

Переменные

var a: Int // var %имя переменной%: %тип переменной%
a = 1
var b: Double = 2.4
var c: Float = 3.14
var d = "Привет мир"
var e: Character = "e"
var f = true

Все что было сказано выше про константы, справедливо и для переменных. Их можно так же объявлять, но только с использование ключевого слова var вместо let, так же использовать, так же присваивать значения, они так же выводят типы и так далее. Единственная разница кроме ключевого слова — для переменных можно присваивать значения несколько раз, а для констант только один раз (Рис. 6).

Рис. 6

Зачем вообще нужны переменные и константы

Можно было бы конечно везде использовать просто литералы, но переменные и константы намного удобнее. Они решают множество задач:

Когда использовать переменные, а когда константы

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

Установка и настройка Xcode

Что такое Xcode

Xcode это программа для разработки приложений. В основном для iPhone, iPad, MacOS. Реже используется для разработки других приложений. Xcode это не просто реактор кода, это IDE (айдэе) (Integrated development environment) интегрированная среда разработки. В ней можно писать код на разных языках програмирования, а так же:

Можно ли писать программы для iPhone без Xcode

И да и нет. У нас есть дургие IDE, например AppCode. Но они не пользуются особой популярность, имеют некоторые проблемы и платные. Технически можно написать приложение даже в блокноте. Но при этом прийдется выполнить много сложных и не очевидных действий для того что бы настроить сборку приложения и запустить его. Но, в любом случае на компьютере должен быть установлен Xcode.

На этом курсе я буду использовать только Xcode.

Платный ли Xcode

Нет, он полностью бесплатный

Нужно ли мне еще что нибудь кроме Xcode

В целом одного Xcode достаточно что бы написать любое приложение под iOS. Но есть множество других программ которые упрощают разработку, о них я расскажу позже.

Для установки Xcode нужен apple id

AppleID это учетная запись apple. Если вы активно используете iPhone, iPad или MacOS она у вас уже есть. В противном случае нужно ее зарегистрировать используя [эту официальную инструкцию](https://support.apple.com/en-ca/HT204316

Как установить Xcode

Есть два способа: установить через официальный магазин приложений или скачать с сайта developer.apple.com Я рекомендую устанавливать Xcode из официального магазина приложений. Это удобнее и проще.

Загрузка с сайта обычно происходит быстрее чем из магазина, но не существено. И к этому способу прибегают либо если очень торопятся, либо что бы иметь на компьютере две и более версий xcode. Это нужно не часто.

Как установить Xcode через официальный магазин приложений

Для начала нужно открыть магазин.

Для этого нажите на иконку яблока на панели задачь в верхнем левом углу. Нжмите в открывшемся меню на пункт “AppStore..”.

Найдите Xcode в магазине

Для этого в поисковой строке, расположенной слева вверху, введите “Xcode” и нажмите “enter”.

Загрузите Xcode

Для этого найдти в результах поиса Xcode и нажмите на кнопку “Загрузить”. На моем скришоте там находится кнопка “Открыть”, потому что у меня Xcode уже установленю

Дождитесь окончания загрузки и установки

После окончания загрузки, установка прозойдет автоматически. Рекомендую запастись терпением, это длительный процесс и может занимать до 6 часов времени.

Как скачать Xcode с официального сайта

Скачайте последнюю версию

Зайдите на сайт по url — https://developer.apple.com/download/applications/. Нажмите на ссылку “Download xcode …” и дождитесь загрузки архива.

Установите Xcode из архива

Найдите файл архива в папке загрузок и кликните по нему два раза мышкой. Начнется процесс распаковки и установки.

В Xcode обязательно нужно авторизоваться

Xcode требует авторизации под вашим appleID. Отдельную учетную запись регистировать не нужно.

Откройте Xcode

Для этого запустите Lauchpad.

Найдите среди программ иконку Xcode и запустите ее двойным кликом мыши.

Откройте настройки

В меню, в левом верхнем углу, нажмие на пункт “Xcode” и выберете пункт “Настройки”.

Добавьте аккаунт

В открывшемся окне перейдите на вкладку “Account” и нажмите кнопку “+” в левой нижней части экрана.

Выберете пункт “Apple ID”

Введите данные своей учетной записи

Оставлось только ввести вашь логин и пароль от AppleId. Теперь вы готовы к созданию первых приложенийю

Как правильно проходить этот курс

Часто сталкиваюсь с непониманием как проходить курс. Поэтому постарался собрать здесь основные вопросы, а также рассказать об основных проблемах с которыми сталкиваются слушатели курса.

Структура курса

Курс разделен на три части: основы разработки, регулярные знания, тайные знания

Основы разработки

Данный раздел рассчитан на людей которые не имеют никакого опыта в программировании. Но тем не менее разбираться в компьютере на уровне пользователя необходимо.

В первой половине модуля, я даю не столько знания iOS разработки, сколько разработки в целом. Ты познакомишься с базовыми концепциями программирования: переменными, коллекциями, операторами, управлением потоком, функциями и классами. Разберешься с тем что это такое, зачем оно может понадобиться и как этим пользоваться. Так же ты ознакомимся с основными инструментами iOS разработчика. Xcode, git, отладчик, консоль.

Во второй половине, ты разберешься с основами создания приложений под iOS. При этом произойдет резкий скачок сложности. Потому что помимо основных концепций разработки в целом, придется изучать готовые библиотеки, например SwiftUI.

Регулярные знания.

Этот блок будет идти больше года и состоять из отдельных кусочков. Каждый такой кусочек будет посвящен одному из аспектов разработки, например языку, UIKit (Библиотека для создания графического интерфейса), GCD (Библиотека для организации паралельных вычеслений) и так далее. В рамках этих кусочков, будут как простые так и сложные материалы.

Тайные знания

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

Пометки

Каждый урок будет иметь приблизительную маркировку сложности:

Важно — маркировка приблизительная, то есть расставляется на основе моих субъективных ощущений. Не надо переживать если не понял что то помеченное как “Джун” и наоборот радоваться если все понятно в уровне “Синьор”.

Кривая сложности

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

Типичные контрольные точки:

Основные советы

По порядку

Просматривать уроки лучше всего по порядку.

Не паниковать

Во время обучения, часто будут возникать ситуации когда ничего не понятно. Не нужно думать что дело в тебе. С этим сталкиваются все. Кому то обучение дается проще, кому то сложнее, но никто не понимает все с первого раза.

Уделять практике и теории одинаковое количество времени

Если все время смотреть видео, то мало чему можно научиться. С другой стороны и одна практика мало продуктивна. Их нужно сочетать. Хороший способ делать это, начать параллельно курсу создавать свое приложение и пытаться применить там информацию из видео.

Не стоит бежать вперед

Знания в разработке организуются по принципу пирамиды. Это значит, что для усвоения каких то новых вещей, требуется понять то что рассказывали до этого. Если ты будешь пытаться угнаться за курсом в ущерб пониманию, то с каждым новым видео будет становиться все сложнее.

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

Повторение мать учения

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

Нужно учится искать информацию самостоятельно

Каким бы подробным не был мой курс знаний в программировании во много раз больше. Поэтому необходимо искать информацию самостоятельно.

Очень рекомендую читать документацию, научиться пользоваться встроенной справкой в xcode и подружиться со stackoverflow. Все это можно использовать и как справочник если что то вылетело из головы и как учебник и даже как источник решения конкретной проблемы.

Разработка на swift (не путать с разработкой под iOS)

Запускать простые примеры кода на чистом swift можно под:

  1. MacOS
  2. linux
  3. iPad
  4. на разрличных online площадках, например https://swiftfiddle.com/

Разработка под iOS

Писать приложения для iOS можно под:

  1. MacOS
  2. iPad (подойдет только для простых примеров, полноценное, сложное приложение разработать нельзя)

Где взять MacOS

Единственный официально одобренный сопособ получить MacOS это купить mac

Так же можно:

  1. Настроить хакинтош. То есть поставить MacOS на обычный компьютер. Это не очень простой сопособ, но в целом можно справиться.
  2. Запустить MacOS в VmWare. То есть в виртуальной машине.

Хакентош

Полностью подходит для обучени и разработки настоящих приложений. Есть специалисты которые устанавливают его за деньги.

Виртуальная машина

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

Какой mac покупать?

Тип устройства

На рынке есть несколько главных видов компьютеров от apple:

  1. MacBook — если нужна мобильность
  2. iMac — если работаешь на одном месте и нужен большой экран
  3. Mac mini — если работаешь на одном месте
  4. Mac Studio — если работаем на одном месте и есть деньги за быстрый рабочий инструмент

Начинка устройства

Мы выбираем компьютер по 4ем основным параметрам:

  1. процессор
  2. оперативная память
  3. жесткий диск
  4. год выпуска

Процессор

Cамая важная часть компьютера. От него зависит на сколько быстро он будет работать и как быстро будут запускаться твои приложения. С плохим процессором это может занимать несколько минут, а на больших проектах и часов. С хорошим может хватить одной секунды.

  1. минимальный — Intel i7, 4 ядра
  2. минимальный комфортны — Apple m1
  3. идеальный выбор — Apple m1 pro

Какой конкретно выбрать решай сам. Общее правило — Чем дороже тем быстрее и лучше

Оперативная память.

Тут все просто, важен только объем.

  1. минимальный — 8gb
  2. минимальный комфортны — 16gb
  3. идеальный выбор — 64gb

Жесткий диск

Оцениваются по типу: hdd, ssd, fusion drive (смесь первого и второго) и объему.

  1. минимальный — ssd 128
  2. минимальный комфортны — ssd 256
  3. идеальный выбор — ssd 512

Год выпуска

Как не странно, очень важный параметр. Как минимум потому что apple прекращает поддежку старых устройств и на них нельзя посавить последние macOS, а значит и разрабатывать мобильные приложения на них будет нельзя.

Я бы рекомендовал смотреть на устройcтва не старше 2019 года.

Если ничего не понятно

Если все это слишком не понятно просто открывай магазин и смотри на устройства с процессорами m1, m1 pro, m1 pro max и бери тот на который хватит денег.

Правила поведения в сообществе

Будь дружелюбным — наше самое главное правило. Никогда не стоит как-то оскорблять, проявлять агрессию или токсичность к другим членам сообщества. Смеяться над ними тоже не нужно.

Запрещено

Приветствуется

Полезные ссылки

Как правильно задавать вопросы

Как правильно отвечать на вопросы

Задаем вопросы по программированию правильно

Не бывает глупых вопросов, бывают глупые ответы.

Задавать вопросы это нормально. Но что бы увеличить вероятность ответа, стоит соблюдать несколько правил, которые я тут собрал.

Самое главное правило — нужно попытаться решить проблему самому

На большенство вопросов уже даны ответы. Их можно найти в официальной документации, на stackoverflow и поисковиках. Именно с этого нужно начинать.

Если найти ответ не получается — это нормально. В этом случае хорошим тоном считается попросить помощи в поиске. Попросить подсказать ссылку или ключевые слова для поиска.

Хорошо

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

Плохо

Всем привет. Как мне картинку в кнопку добавить?

Если ты уже почитал документацию, погуглил, но все равно не понятно. То самое время переходить к вопросам в чате. Но хорошо бы об этом сообщить.

Хорошо

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

Вопрос должен быть максимально конкретным

Не стоит задавать:

Попробуй определить что конкретно тебе не понятно в том что ты делаешь. И спроси именно про это.

Если окажется что таких вещей несколько, то задай сразу несколько вопросов, а еще лучше задавай их по очереди.

Хорошо

Всем привет. Пытаюсь распарсить полученную с сервера data в json с помощью decodable, но не получается декодировать поле с датой. С бекенда приходит string, а в приложении используется timestamp.

или

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

Плохо

Всем привет. Не могу получить данные от бекенда, помогите.

или

Как сделать форму авторизации.

Иногда тебе может не хватить знаний на то что бы сформировать вопрос корректно. В этом случае сформулируй его максимально доступно своими словами. Приложи скриншот, приведи пример из другого приложения. Постарайся помочь людям понять твой вопрос быстро и правильно.

Добавь контекст

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

Хорошо

Добрый день. Я в приложении отображаю список книг. Для отображения использую UITableView. Книги получаю с сервера. Таблица сверстана верно, данных с свера приходят корректно. Но в таблице есть постраничная подгрузка книг. И после загрузки второй страницы приложение падает с ошибкой Index out of range.

или

Пытаюсь получить от сервера список книг. Запрос корректно выполняется, получаю корректные данные, но если отправить запрос, свернуть приложение и через минуту развернуть, то запрос завершается с ошибкой -999 в чем может быть проблема?

Плохо

Подскажите что за ошибка. Вот скришот фотография монитора

или

Отправляю запрос на сервер, получаю ошибку -999

Не бывает глупых вопросов. Бывают вопросы которые не нравятся лично тебе.

И сейчас я расскажу, что с этим делать.

Можно просто игнорировать

Если вопрос для тебя не понятен или ты считаешь что он слишком глуп/прост, и разбираться с этим не хочется то не надо грубить, отправлять человека в гугл, в бан, смеяться и так далее. Просто игнорируй.

Скорее всего найдется другой человек, который ответит на этот вопрос.

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

Можно помочь с поиском ответа

Чаще всего авторы задают простые вопросы не потому что им лень искать ответ, а потому что они не могу его найти.

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

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

Главное что бы это не звучало как претензия.

Хорошо

Привет! Ответ на этот вопрос есть в документации. Ты умеешь ей пользоваться или нужна помощь?

или

Привет! в доке подробно расписано, вот ссылка ссылка на доку. Если что то не понятно спрашивай.

или

Ответ на этот вопрос 100% есть на stackOverflow. Поищи по ключевым словам UIButton with two lines of text in the title. Если не найдешь пиши, скину ссылку.

Плохо

Читай доку, там все написано.

или

Нужно уметь самому гуглить.

или

На stackOverflow есть ответ, ищи там.

Можно ответить

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

В общем, мы люди и общаться у нас в генах. А читать эти ваши интернеты против эволюции.