Что такое язык swift
iOS с нуля вместе с Swift. В двух словах о Swift
Apple представила язык программирования Swift во время ежегодной конференции разработчиков в 2014 году, что было полной неожиданностью для сообщества разработчиков. Компания настроена серьезно по отношению к Swift, это не является очередным «игрушечным проектом». Цель Swift — стать основой для следующего поколения приложений на платформе Apple.
Требования
Программирование
Естественно, прояснить основные принципы в программировании и изучить Swift не представляется возможным в рамках одной или двух статей. Так что я предполагаю, что вы уже имеете некоторый опыт в программировании. Ruby, PHP или JavaScript являются хорошей отправной точкой для изучения Swift. Если у вас был ранее опыт web программирования, тогда после прочтения двух последующих статей у вас не должно возникнуть проблем в изучении основ Swift.
Swift
В двух последующих статьях я расскажу о «песочнице», новой фиче, появившейся в Xcode 6. Также мы рассмотрим основные структуры языка программирования Swift, такие как переменные, константы, типы данных, включая множества, массивы и словари.
Также вы изучите основы, касающиеся классов и структур. В следующей статье мы углубимся в изучение замыканий, функций, протоколов и контроле доступа. Всё это должно дать достаточно для понимания языка, чтобы успешно пройти оставшиеся статьи в данном цикле уроков.
Objective-C
Строго говоря, C и Objective-C не являются обязательными для изучения, если вы заинтересованы в разработке для iOS платформы. При этом, множество фреймворков, которые мы будем использовать для разработки iOS приложений, написаны на C и Objective-C. Так что я все равно так или иначе буду говорить о C и Objective-C. Однако же не стоит переживать, я позабочусь о том, чтобы вы могли без труда понимать всё, что необходимо для того, чтобы держать вас на тропе к вашей цели — становлению iOS разработчиком.
Xcode и Swift
На протяжении данной серии уроков мы будем использовать Xcode 7.1 и Swift 2.1. Если вы используете более раннюю версию Xcode, следует иметь ввиду, что вы не сможете работать со Swift 2.1. Swift продолжает стремительно меняться и синтаксис эволюционирует с каждой новой итерацией языка. Так что настоятельно рекомендуется все-таки использовать Xcode 7.1, который включает в себя Swift 2.1.
1. Песочница
В 2014 году Apple представила «песочницу» как часть Xcode 6. Песочница является отличным инструментом для изучения языка программирования Swift. С песочницей вы можете сфокусироваться непосредственно на коде, который вы пишете, вместо того, чтобы возиться с настройками проекта, файлами и папками.
Давайте же создадим песочницу, чтобы начать изучать основы Swift. Запустите Xcode 7.1 и выберите New > Playground. из пункта File в главном меню Xcode. Песочницы можно создавать под следующие платформы: OS X, iOS и tvOS. Выберите в пункте Platform значение iOS и назовите песочницу Swift in a Nutshell.
Укажите в Xcode расположение, куда вы хотите сохранить песочницу, и нажмите Create. На первый взгляд, песочница выглядит как простой файл с расширением .playground, но на самом деле это папка с кучкой файлов. К счастью, это совершенно не имеет для нас значения. С песочницей намного проще работать, чем с обычными проектами Xcode с массой файлов и папок.
Пользовательский интерфейс песочницы абсолютно чистый и простой. Слева находится редактор кода, а вывод — справа. Xcode уже наполнил песочницу тремя строчками кода. Первая строка должна выглядеть знакомо, если вы прочитали предыдущий урок.
2. Переменные и Константы
3. Типы данных
Swift определяет большое количество типов данных, но давайте взглянем на самые распространённые типы данных, с которыми мы будем далее встречаться.
Логические значения
Числа
На первый взгляд, это может показаться серьезной недоработкой языка Swift. Но на самом деле данное поведение является естественным для большинства языков со строгой типизацией. К счастью, решение данной проблемы весьма просто, насколько вы можете увидеть ниже.
Строки
Мы уже встречались с некоторыми строками в данном уроке. Строка — это не что иное, как просто последовательность символов. По сути, возможно получить доступ к коллекции символов как показано в примере ниже.
Коллекции
Any и AnyObject
4. Классы и структуры
Классы
Инициализация и изменение экземпляра класса Boat является совершенно элементарным, как вы можете видеть ниже. Вызов метода у экземпляра объекта также не является чем-то магическим. Основы работы с классами в Swift легки в понимании. Верно?
Структуры
Следующий пример демонстрирует наиболее важное различие между классами и структурами в Swift.
Следствия
Мы уже познакомились с наиболее распространёнными типами данных, определенными стандартной библиотекой языка Swift. Что я еще не упомянул в данном обсуждении, так это то, что каждый тип данных Swift, с которым мы имели дело до текущего момента, являлся структурой.
Каждый тип коллекций в Swift, например, является структурой. Каждый численный тип является структурой. Это важно знать и понимать, особенно если вы пришли из языка, который передаёт некоторые из этих типов по ссылке, такого как Ruby или Objective-C.
Больше различий
Более неочевидное различие между классами и структурами состоит в проверке типов во время исполнения. Вы можете проверить тип экземпляра класса во время исполнения, в то время как для экземпляров структур этого сделать нельзя.
5. Опциональные типы
Опциональные типы являются неотъемлемой частью языка программирования Swift. Давайте выясним, что же такое опциональные типы и почему они так важны. Переменная должна быть инициализирована до того, как она может быть использована. Давайте взглянем на следующий пример, чтобы понять, что это значит.
Если вы привыкли работать со строками в других языках программирования, вы можете быть удивлены, что компилятор выдаст ошибку. Посмотрим, о чём эта ошибка нам говорит.
Что такое «Опциональный тип»?
Swift использует опциональные типы чтобы инкапсулировать важную концепцию, имеет ли переменная или константа значение или не имеет. Это предельно просто в Swift. Для того, чтобы объявить переменную или константу как опциональную, мы добавляем знак вопроса к имени типа переменной или константы.
Принудительное разыменование
Важно знать, что опционал действительно содержит значение, прежде чем разыменовывать его. Если попытаться принудительно разыменовать опционал, у которого нет значения, Swift выбросит исключение и ваше приложение аварийно завершится.
Опциональное Связывание
Сначала мы проверяем, равняется ли str значению nil перед тем, как вывести её содержимое. В данном примере str не имеет значения. Это означает, что она не будет принудительно разыменована по случайности.
В Swift nil означает отсутствие какого бы то ни было значения. В то время, как в Objective-C nil применим только к объектам, в Swift nil может быть использован для любого типа.
Не пропустили ли вы Точку с запятой?
Заметили ли вы, что мы не использовали точек с запятой в примерах в данной статье? В Swift нет необходимости использовать точку с запятой, поскольку компилятор достаточно умён, чтобы понять, где заканчивается одно выражение и начинается другое. Если же вы очень скучаете по точкам с запятой, ничего страшного, их можно добавлять по своему усмотрению. Однако же, стоит помнить, что официальное руководство к языку не рекомендует использовать символы точки с запятой.
Заключение
Хотя мы лишь поверхностно изучили Swift в данном уроке, теперь вы имеете базовое представление о данном языке программирования. В следующем уроке мы рассмотрим другой ключевой компонент языка: замыкания и функции. Также мы обсудим протоколы и контроль доступа.
Если у вас остались какие-либо вопросы или комментарии, вы можете их оставить в комментариях ниже или связаться со мной через Twitter.
Swift. Язык программирования с открытым кодом. Мощь, простота и потрясающие приложения.
Swift — это надёжный и интуитивно понятный язык программирования от Apple, при помощи которого можно создавать приложения для iOS, Mac, Apple TV и Apple Watch. Он предоставляет разработчикам небывалую свободу творчества. Благодаря этому простому и удобному языку с открытым кодом вам достаточно просто интересной идеи, чтобы создать нечто невероятное.
Разработчики уже пользуются
удивительными возможностями Swift.
Swift — это быстрый и эффективный язык программирования с откликом в реальном времени, который легко можно вставить в готовый код Objective-C. Теперь разработчики могут не только писать более надёжные и безопасные коды, но также экономить время и создавать приложения с расширенными возможностями.
Прекрасное приложение в Swift. Простота использования и отклик в реальном времени — вот почему VSCO выбрали Swift, чтобы создать новую версию своего фотоприложения для iOS.
Превосходные приложения,
разработанные на языке Swift.
Всё больше разработчиков встраивают код Swift в свои приложения. А некоторые даже создают в Swift совершенно новые приложения.
Производительность выше. Приложения лучше.
Приложения Swift превосходят ожидания. Например, обычный алгоритм поиска выполняется в Swift гораздо быстрее.
В графе с использованием алгоритма поиска в глубину найдено 10 000 целых чисел*
Язык Swift добавлен
в учебную программу.
Потенциал Swift оценили учебные заведения по всему миру. Они используют Swift и Xcode на Mac для обучения, обеспечивая своих студентов лучшими инструментами для создания приложений. А с бесплатной учебной программой от Apple «Разработка на языке Swift» даже новички легко переходят от основ программирования к профессиональной разработке.
Университеты, включившие язык Swift в учебную программу
Swift повсюду.
И теперь открыт для всех.
Swift бесплатно доступен для использования разработчиками, преподавателями и студентами по лицензии на распространение ПО с открытым исходным кодом Apache 2.0. Мы предоставляем двоичные файлы для OS X и Linux, которые позволяют компилировать код для iOS, OS X, watchOS, tvOS и Linux. А чтобы ускорить развитие и превращение Swift в ещё более мощный язык, мы создали новое сообщество, где пользователи могут напрямую вносить свой вклад в исходный код Swift.
Познакомьтесь со Swift.
Главная книга
Загрузите учебник Язык программирования Swift из Apple Books Store бесплатно. Узнайте, как благодаря Swift процесс программирования становится более удобным, гибким и увлекательным.
Xcode
Xcode — это приложение для Mac, предназначенное для разработки других приложений для Mac и iOS. В Xcode есть все инструменты, необходимые для создания потрясающих приложений. Его можно загрузить бесплатно из Mac App Store.
Веб-сайт для разработчиков
Получите подробную техническую информацию и ознакомьтесь с полным обзором языка Swift. Посмотрите блог для разработчиков, чтобы быть в курсе последних новостей. У вас также есть бесплатный доступ к отличным ресурсам: руководствам, видео и примерам кода.
Язык программирования Swift. Русская версия
Привет, Хабр! 2 июня все мы воочию могли наблюдать, как компания Apple начала творить революцию в стане Objective-C разработчиков, представив миру свой новый язык программирования – Swift. Вместе с этим, она выложила в открытый доступ небольшую документацию по языку, которую мы решили перевести, если на то будет спрос. Предлагаем вашему вниманию перевод первой главы. Если тема будет интересна, то мы продолжим публиковать перевод каждую неделю.
Оглавление
Добро пожаловать в Swift
О Swift
Введение в Swift
Language guide
The Basics
Basic Operators
String and Characters
Collection Types
Control Flow
Functions
Closures
Enumerations
Classes and Structures
Properties
Methods
Subscripts
Inheritance
Initialization
Deinitialization
Automatic Reference Counting
Optional Chaining
Type Casting
Nested Types
Extensions
Protocols
Generics
Advanced Operators
Language Reference
About the Language Reference
Lexical Structure
Types
Expressions
Statements
Declarations
Attributes
Patterns
Generic Parameters and Arguments
Summary of the Grammar
Trademarks
Добро пожаловать в Swift
О языке Swift
Swift – это новый язык программирования для разработки iOS и OS X приложений, который сочетает в себе все лучшее от C и Objective-C, но лишен ограничений, накладываемых в угоду совместимости с C. В Swift используются паттерны безопасного программирования и добавлены современные функции, превращающие создание приложения в простой, более гибкий и увлекательный процесс. Swift, созданый нами с чистого листа, – это возможность заново представить себе, как разрабатываются приложения.
Swift разрабатывался нами несколько лет. Основой нового языка программирования послужили существующие компилятор, отладчик и фреймворки. Мы упростили процесс управления памятью с помощью механизма автоматического подсчета ссылок – Automatic Reference Counting (ARC). Наши фреймворки также подверглись серьезной модернизации. Objective-C начал поддерживать блоки, литералы и модули – все это создало благоприятные условия для внедрения современных технологий. Именно эта подготовительная работа послужила фундаментом для нового языка программирования, который будет применяться для разработки будущих программных продуктов для Apple.
Разработчикам Objective-C Swift покажется знакомым. Он сочетает в себе читабельность именованных параметров и мощь динамической объектной модели Objective-C. Он открывает доступ к уже существующим фреймворкам Cocoa и совместим с кодом, написанным на Objective-C. Построенный на этой общей основе язык предлагает множество новых возможностей и унифицирует процедурные и объектно-ориентированные аспекты языка программирования.
Swift не отпугнет и начинающих программистов. Это первый мощный язык программирования, такой же понятный и увлекательный, как скриптовый язык. Он поддерживает так называемые playground-ы, которые позволяют программистам экспериментировать с кодом, видя результат в режиме реального времени без необходимости компилировать и запускать приложение.
Swift вобрал в себя все лучшее от современных языков и разработан с учетом обширного опыта компании Apple. Наш компилятор – синоним производительности, наш язык оптимизирован для разработки без оглядки на компромиссы. Он спроектирован таким образом, чтобы вы смогли легко разработать и ваше первое приложение «hello, world!», и даже целую операционную систему. Все это делает Swift важным инструментом для разработчиков и для самой компании Apple.
Swift – это новый фантастический способ создавать приложения для iOS и OS X, и мы продолжим развивать его, добавляя новый функционал и представляя новые возможности. Наша цель – амбициозна. И мы с нетерпением ждем, чтобы увидеть, что вы сумеете создать при помощи него.
Введение в Swift
Если вы когда-нибудь разрабатывали на C или Objective-C этот синтаксис должен казаться вам до боли знакомым – в Swift эта строчка кода является законченной программой. Вам больше не нужно импортировать отдельные библиотеки для обеспечения базового функционала вроде ввода/вывода в консоль или работы со строками. Код, написанный в глобальной области видимости, является точкой входа в программу, таким образом функция main больше не нужна. Также обратите внимание на отсутствие точки с запятой в конце каждой строки.
Это введение содержит достаточно информации, чтобы начать писать код на Swift. Не переживайте, если вам будет что-то непонятно – мы все детально объясним в последующих главах.
Замечание
Для лучшего понимания материала мы рекомендуем использовать режим playground в Xcode. Playground позволяет вам видеть результат сразу в процессе редактирования кода без необходимости компилировать и запускать приложение.
Простые типы данных
Используйте let для создания константы и var для создания переменной. Тип константы указывать не нужно, вы можете присвоить ей значение лишь единожды.
Типы константы и переменной должны совпадать с типами присваиваемых им соответствующих значений. Однако это не означает, что вы должны напрямую указывать их тип. Компилятор автоматически определит тип константы и переменной при присваивании им значения. Так, в приведенном примере компилятор определит, что myVariable имеет целочисленный тип.
Если же инициализатор отсутствует или не предоставляет достаточной информации, вы можете указать тип самостоятельно после переменной, разделив название и тип двоеточием:
Давайте поэкспериментируем
Создайте константу с типом Float и проинициализируйте ее числом 4.
Значения никогда не конвертируются в другой тип неявно. Если вам необходимо конвертировать значение в другой тип, делайте это явно:
Давайте поэкспериментируем
Попробуйте удалить явное преобразование к типу String в последней строке. Какую ошибку вы получите?
Имеется более простой способ включения значений в строки: для этого заключите выражение в скобки и поставьте перед ними обратный слэш ( \ ). Пример:
Давайте поэкспериментируем
Попробуйте использовать конструкцию \() и выведите на экран строку, включающую результат суммы двух целочисленных переменных и чье-нибудь имя.
При работе с массивами и ассоциативными массивами (словарями, dictionary) используются квадратные скобки ( [] ):
Чтобы создать пустой массив или dictionary, используйте следующий синтаксис:
Для создания пустых массивов и словарей используйте [] и [:] соответственно, – например, когда вы присваиваете новое значение переменной или передаете аргумент в функцию.
Условия и циклы
Условие внутри оператора if должно быть логическим, это в частности означает, что выражение if score <…>является ошибочным, поскольку здесь нет явного сравнения (например, с нулем).
Оператор множественного выбора switch поддерживает внутри себя множество других операторов сравнения и не ограничен лишь простыми сравнениями:
Давайте поэкспериментируем
Попробуйте удалить условие по умолчанию. Какую ошибку вы получите?
Для перебирания элементов ассоциативного массива используйте оператор for-in совместно с указанием пары имен для каждой пары ключ-значение.
Давайте поэкспериментируем
Добавьте еще одну переменную, которая позволит выяснить, к какому из трех типов относится найденное максимальное число.
Оператор цикла while позволяет выполнять блок кода внутри него до тех пор, пока условие не станет ложным. Условие также может быть указано после блока, который в таком случае будет выполнен по крайней мере один раз.
Функции и замыкания.
Давайте поэкспериментируем
Удалите параметр day. Вместо него добавьте переменную, обозначающую наименование подаваемого на обед блюда.
Если функция возвращает множество значений, следует использовать кортеж:
Функции также могут иметь неопределенное число аргументов:
Давайте поэкспериментируем
Напишите функцию, позволяющую находить среднее арифметическое произвольного числа своих аргументов.
Функции могут вкладываться друг в друга. Вложенная функция может обращаться к переменным, объявленным во внешней функции. Используйте вложенные функции, чтобы привести в порядок код сложной или большой функции.
Функции являются объектами первого класса (first-class type), иными словами, функция в качестве свого результата может возвращать другую функцию.
Функция также может принимать другую функцию в качестве одного из аргументов.
Давайте поэкспериментируем
Перепишите замыкание таким образом, чтобы оно возвращало ноль для всех лишних чисел.
Существует несколько техник, позволяющих делать замыкания более лаконичными. Если тип замыкания априори известен (например, это callback делегата), можно опустить указание типа его параметров и/или типа возвращаемого значения. Замыкания, состоящие из единственного выражения, неявно возвращают результат этого выражения.
В замыкании вместо указания имени переменной, вы можете использовать ее порядковый номер – это особенно полезно при написании коротких замыканий. Замыкание, являющееся последним аргументом функции, может быть передано в нее сразу после круглых скобок с перечнем остальных параметров.
Объекты и классы
Давайте поэкспериментируем
Добавьте константу-член класса и метод класса, принимающую ее в качестве своего аргумента.
Чтобы создать экземпляр (объект) класса, достаточно добавить круглые скобки после названия класса. Доступ к методам и членам класса осуществляется через точку.
Чтобы наследовать класс от уже существующего класса, после указания имени дочернего класса следует поставить двоеточие и указать название родительского. В Swift нет никаких ограничений по обязательному наследованию какого-либо стандартного класса.
У методов классов имеется одно важное отличие от функций. Названия аргументов функции используются только в пределах этой функции, тогда как в методе класса параметры также используются при вызове этого метода (кроме первого параметра). По умолчанию метод класса имеет одинаковые названия параметров как при вызове, так и внутри себя. Однако вы можете указать другое название (в примере ниже – times ), которое будет использовано только внутри этого метода. При этом для вызова этого метода необходимо использовать первое название ( numberOfTimes ).
Перечисления и Структуры
Давайте поэкспериментируем
Напишите функцию, которая сравнивает 2 перечисления типа Rank по их значениям.
В вышеприведенном примере элементы перечисления первоначально имеют целочисленный тип, и вам достаточно указать значение только первого элемента – значения остальных элементов будут определены в соответствии с порядком их следования. В качестве исходного типа (raw value) значений элементов вы также можете выбрать строковый или вещественные типы.
Отметим, что значения элементов перечисления являются фактическими, а не просто иной записью своих исходных значений. Вообще говоря, вы можете и не указывать их исходные значения.
Давайте поэкспериментируем
Добавьте в структуру Card метод, который создает полную колоду карт.
Экземпляр члена перечисления может иметь собственные значения и они могут быть разными. Вы присваиваете эти значения при создании экземпляра перечисления (константа success в примере). Связанные и исходные значения это разные вещи: исходное значение члена перечисления всегда постоянно для всех экземпляров перечисления и указывается при его объявлении.
Рассмотрим пример получения с сервера времени восхода и заката Солнца. Сервер отправляет в ответ либо соответствующую информацию, либо сообщение об ошибке.
Давайте поэкспериментируем
Добавьте третий вариант в оператор множественного выбора switch
Обратите внимание, каким образом из объекта ServerResponse “вытаскиваются” время восхода и заката.
Протоколы и Расширения.
Протоколы могут поддерживаться классами, перечислениями и структурами.
Давайте поэкспериментируем
Создайте перечисление, которое будет реализовывать этот протокол.
Вы можете использовать название протокола как и любой другой тип – например, чтобы создать массив объектов разного типа, но реализующих общий протокол. Заметьте, что при работе с объектами такого типа методы, объявленные вне протокола, будут недоступны.
Обобщенные типы (generics)
Для создания обобщенного типа, заключите имя в угловые скобки ( <> ).
Создавайте обобщенные функции, классы, перечисления и структуры.
Давайте поэкспериментируем
Измените функцию anyCommonElements таким образом, чтобы она возвращала массив общих элементов.
Хотите внедрить подписки в iOS-приложение за 10 минут? Интегрируйте Apphud и:
— оформляйте покупки с помощью лишь одного метода;
— автоматически отслеживайте состояние подписки каждого пользователя;
— легко интегрируйте Subscription Offers;
— отправляйте события о подписках в Amplitude, Mixpanel, Slack и Telegram с учетом локальной валюты пользователя;
— уменьшайте Churn rate в приложениях и возвращайте отписавшихся пользователей.