Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Введение в Swift: часть 1

by
Difficulty:BeginnerLength:LongLanguages:

Russian (Pусский) translation by Jenyia (you can also view the original English article)

На WWDC 2014 Apple представила одно из самых больших обновлений для iOS с 2008 года с точки зрения разработчика. Они представили HomeKit, HealthKit, CloudKit и расширения, просто чтобы назвать несколько. Но самым большим сюрпризом для WWDC 2014 стало внедрение совершенно нового языка программирования Swift.

Swift - замечательный язык программирования, который был построен с нуля для эффективности и безопасности. Он использует те же API, что и Objective-C. Или, что вы можете сделать в Objective-C, вы можете сделать в Swift. В нем также представлены некоторые новые концепции, которые оценят опытные программисты, и некоторые из которых я расскажу в этой вводной серии о Swift.

В этой серии я предполагаю, что вы уже знакомы с Objective-C. В первой статье этой серии я расскажу о философии Swift, структуре файла и синтаксисе. Во второй статье я перейду к более продвинутым аспектам синтаксиса Swift, таким как опции и управление памятью. Приготовьтесь, ребята, это будет незабываемым.

1. Философия

Чтобы лучше понять Swift, Apple за последние несколько лет создала нам условия для структурных улучшений в Objective-C. Улучшения Objective-C, такие как кодовые блоки, литеральные массивы и словарные определения, и ARC (Automatic Reference Counting) - это всего лишь несколько вещей Apple, добавленых в Objective-C, что облегчает переход на Swift.

Одним из важных элементов философии Swift является инициализация кода. Все объекты и переменные, определенные в Swift, должны быть инициализированы в коде. Неинициализированный объект или переменная приведет к ошибке времени компиляции в Swift. Это гарантирует, что объект или переменная всегда имеет значение. В Swift есть один специальный случай, когда начальное значение не может быть определено. В этом специальном случае ваша переменная называется optional. Мы рассмотрим варианты во второй части этой серии.

Еще одним важным компонентом является отраслевая полнота. Все условные ветви, будь то if или switch/case, должны охватывать все условия. Таким образом, ни один код не может потерпеть неудачу без его охвата. Отсутствие условия в вашей ветке утверждения будет установлено и сгенерирует ошибку времени компиляции.

Одним из последних элементов философии Swift является его предпочтение константам перед переменными. Swift определяет переменные и константы следующим образом:

В приведенном выше примере ключевое слово let используется для определения константы, в то время как ключевое слово var определяет переменную. Сделав определение констант таким простым, Apple по возможности поощряет использование констант. Это приводит к более безопасному коду в многопоточной среде и лучшей оптимизации кода, поскольку компилятор знает, что значение константы не изменится.

Теперь для Swift существует гораздо больше нескольких синтаксисов и улучшений форматирования. Swift был построен с нуля, чтобы исправить множество распространенных C/C ++ и, по сути, источников Objective-C, таких как:

  • индексы вне диапазона в массивах
  • неинициализированные данные
  • непроверенные типы возврата
  • непроверенный доступ к указателю
  • неявное падение
  • ошибки goto

Как тот, кто работает как для iOS, так и для Android, я знаю из первых рук, насколько интереснее кодирование для платформы iOS на самом деле с Cocoa и UIKit. Эта серия покажет вам, насколько более интересным может быть кодирование, добавив Swift в микс.

2. Структура файла

В Objective-C у нас есть файлы заголовков (.h) и файлы реализации (.m). Это то, что Objective-C, унаследовал от языка C.

В Swift класс определяется в одном файле реализации (.swift), который включает в себя все определения и реализации класса. Это напоминает другие языки, такие как Java и C#.

Gone - это необходимость перехватывания файлов заголовков и добавления текстового файла #IFNDEF в верхней части файлов заголовков.

3. Синтаксис

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

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

Еще одно важное изменение в Swift заключается в том, что фигурные скобки являются обязательными для операторов if. Это означает, что больше нет Heartbleedbugs.

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

4. Сходство с Objective-C

Я начну с отображения трех фрагментов кода, которые иллюстрируют некоторые сходства с Objective-C. Это поможет вам в понимании языка Swift.

Программисты Objective-C обнаруживают, что Swift имеет те же самые инструкции веток и итераций, с которыми вы уже знакомы, например, как if/else, for циклов, for..in циклов, и switch утверждения.

Swift включает двух операторов диапазона, ..<и ..., чтобы указать диапазон значений. В вышеприведенном цикле for мы используем оператор полузамкнутого диапазона, ..<, чтобы указать диапазон значений, который включает в себя 1, 2, 3 и 4, но исключает 5. Другим оператором диапазона является оператор замкнутого диапазона, .... Он задает диапазон значений, который включает значение с обеих сторон оператора замкнутого диапазона. Например, 1...5. задает диапазон значений от 1 до 5, включая 5.

5. Определение переменных и констант

Давайте пересмотрим пример, который я показал вам ранее.

В Swift мы определяем константы, используя ключевое слово let и переменные, используя ключевое слово var. Двоеточие,:, является маркером для определения типов. В приведенном выше примере мы создаем константу и переменную типа String.

Мы также инициализируем константу и переменную со строкой. В Swift строки определяются точно так же, как строки C в Objective-C, они не предшествующий символу @.

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

Если мы перепишем приведенный выше пример, позволяя сделать вывод о типе своей работы, то фрагмент кода будет выглядеть следующим образом:

Это намного лучше, и код намного точнее. Компилятор достаточно умен, чтобы понять, что someInt - это Int и someFloat - это Double.

 6. Строки

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

Начнем с примера Objective-C. Чтобы объединить две строки в Objective-C, мы делаем следующее:

В Swift, чтобы добавить строку в другую строку, мы используем оператор +. Это очень просто.

Строки в Swift - это Unicode, что означает, что мы можем написать:

Мы можем перебирать символы строки, используя утверждение for..in, как показано в следующем примере. Мы можем использовать цикл for..in для повторения строк Unicode. Это действительно здорово.

Последнее, что я хотел бы рассказать о строках, прежде чем двигаться дальше, - это интерполяция строк. В Objective-C, если мы хотим вывести строку с переменными, мы вызываем [NSString stringWithFormat:]. В Swift переменные могут быть внедрены. Взгляните на следующий пример.

Чтобы использовать интерполяцию строк, вы завершаете вызов переменной или функции в круглых скобках и помещаете обратную косую черту перед ней, \( expression).

7. Массивы и словари

Arrays & Dictionaries

Как программист Objective-C, вы уже знакомы с массивами и словарями. Swift также имеет классы сбора и добавляет к ним несколько дополнительных функций.

Как вы используете коллекции в Swift? В Swift они называются Array и Dictionary. Объявление массива в Swift аналогично объявлению литерала массива в Objective-C с использованием набора квадратных скобок [ ], но без предшествующего им символа @.

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

Видоизменяемость

Если объект Array эквивалентен объекту NSArray, а объект Dictionary эквивалентен объекту NSDictionary, то как мы создаем изменяемые массивы и словари в Swift?

Ответ очень прост, объявите объект переменной. Другими словами, в предыдущем примере someArray является эквивалентом экземпляра NSArray, а someOtherArray - экземпляром NSMutableArray. Это относится и к словарям. В предыдущем примере someDictionary является эквивалентом экземпляра NSDictionary и someOomeDictionary, который имеет образец NSMutableDictionary. Это здорово, правда?

Хотя массивы Objective-C и словари могут содержать только объекты, в Swift коллекции могут содержать объекты, а также примитивные типы данных, такие как целые числа и поплавки. Еще одно важное отличие от Objective-C состоит в том, что коллекции в Swift набираются, явно или через вывод типа во время компиляции. Указав тип объектов в коллекции, Swift добавляет дополнительную безопасность для этих коллекций.

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

Мы можем переопределить объекты Array и Dictionary, которые мы объявили ранее, следующим образом:

Компилятор проверяет коллекции во время их инициализации и выводит правильный тип. Другими словами, он понимает someArray и someOtherArray - это набор объектов String, а someDictionary и someOtherDictionary - это словари с ключами типа String и значениями типа Int.

Манипуляция с коллекциями

Добавление объекта или другого массива в массив очень похоже на конкатенацию строк, поскольку мы также используем оператор +.

Манипулирование словарями так же просто.

Типичные коллекции

Раньше я упоминал, что наборы в Свифт напечатаны, но что это значит? Если мы определяем коллекцию, содержащую объекты String, вы можете добавлять объекты String только к этой коллекции. При этом может произойти ошибка.

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

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

Однако добавление объекта другого типа приведет к ошибке.

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

В нашем примере объект Car имеет метод accelerate. Поскольку коллекция введена, мы можем захватить элемент из массива и сразу вызвать метод объекта в одной строке кода. Нам не нужно беспокоиться о типе элемента, поскольку коллекция содержит только объекты Car.

Чтобы выполнить то же самое в Objective-C с таким же уровнем безопасности, нам нужно написать следующее:

Наконец, для итерации массива мы используем цикл for..in:

Наконец, для итерации массива мы используем цикл for..in:

Как вы можете видеть, типизированные коллекции - это мощная функция языка Swift.

Вывод

Мы уже довольно много узнали о языке Swift, и вы должны потратить время, чтобы погрузиться. Я рекомендую вам как можно скорее загрузить Xcode 6 и начать применять то, что вы узнали в этой статье, в с особеннстям новой Playground в Xcode. Playgrounds позволяют играть с Swift в режиме реального времени.

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.