Путеводитель по Swift. Теория и практические советы по написанию чистого кода
Усі статті, обговорення, новини про Mobile — в одному місці. Підписуйтеся на телеграм-канал!
Привет! Меня зовут Максим Федоряка, я Software Engineer (iOS) в компании Innovecs. В этом материале рассказываю об особенностях языка программирования Swift, а также делюсь советами и рекомендациями по его применению.
К январю 2019 года в мире использовали более 1,4 миллиарда устройств iOS. По состоянию на июль того же года iOS установили на 22,1% всех мобильных девайсов.
В некоторых регионах, таких как США, Великобритания и Франция, Apple превосходит Android по количеству продаж смартфонов. Многие компании и разработчики сосредотачивают свои программные продукты в первую очередь на платформу iOS, а в некоторых случаях — инвестируют исключительно в iOS из стратегических соображений.
Для бизнесов, которые занимаются разработкой приложений для iOS, выбор правильного технологического стека для продукта крайне важен. Если вы хотите заняться нативной разработкой вместо кроссплатформенных решений, вам все равно придется работать со Swift.
Что такое Swift
Swift — мощный и интуитивно понятный язык программирования для macOS, iOS, watchOS, tvOS и не только. Написание кода Swift интерактивно и увлекательно, синтаксис лаконичен и выразителен. Swift включает современные функции, которые нравятся разработчикам. Код Swift безопасен по своей задумке, но это не мешает создавать программное обеспечение, которое работает с молниеносной скоростью.
Swift будет отличным языком программирования для тех, кто только думает связать свою жизнь с созданием ПО, а также для людей, которые исследуют новые карьерные пути и приходят из других платформ, языков и экосистем. Ознакомиться со Swift можно даже не имея компьютера с macOS и Xcode, достаточно просто загрузить приложение Playgrounds для iPad.
UIKit — фреймворк пользовательского интерфейса, содержащий множество готовых элементов и классов, которые используют для создания пользовательского интерфейса приложения. Это классический подход к построению интерфейса iOS приложений, использующийся в большинстве приложений.
SwiftUI — декларативный UI фреймворк. Вместо того чтобы писать код для управления каждым маленьким действием, вы просто говорите SwiftUI, что вы хотите, а затем позволяете фреймворку делать это за вас. Несмотря на популярность SwiftUI, у него есть своя специфика, о которой я расскажу ниже.
Развитие Swift
Представленный в 2014 году, Swift был разработан как замена более раннему языку программирования Apple Objective-C, который практически не изменился с начала
Конечно, развитие не дается легко. Как и любой молодой язык программирования, первые годы Swift страдал от младенческих проблем, из них до недавнего времени — отсутствие стабильности ABI.
До Swift 5 разработчики должны были знать о проблемах совместимости версий, поскольку предыдущие версии Swift отличались друг от друга. Не было согласованных двоичных файлов для взаимодействия друг с другом. Это приводило к множеству проблем с миграцией. Нужно было перенести весь код на последнюю версию Swift, чтобы гарантировать его исправность.
Не было встроенных библиотек, поэтому размеры приложений увеличивались из-за всех библиотек. Всякий раз, когда приложение было собрано, динамическая библиотека Swift была встроена в пакет приложения для поддержки конкретной версии Swift.
В Swift 5 ввели стабильность ABI, и с тех пор все вышеуказанные библиотеки будут упакованы и связаны с операционной системой. Это означает, что если в будущих версиях Swift произойдут какие-либо изменения, они будут поставляться с ОС, над которой работает разработчик. Приложение будет автоматически использовать его при работе в этой ОС без необходимости перекомпилировать и повторно загружать приложение.
Поскольку библиотеки Swift не нужно встраивать в приложение, размер пакета приложения будет уменьшаться, как и потребление памяти. Уменьшение общего размера приложения — преимущество для пользователей, так как теперь им нужно использовать меньше ресурсов для загрузки приложения из App Store.
Это было одной из наибольших проблем Swift. Сейчас, спустя 7 лет после его анонса в 2014 году, язык развился до абсолютно стабильного и удобного в использовании инструмента. Именно поэтому Swift — стандарт, когда мы говорим о разработке приложения для платформ Apple.
Зачем писать код на Swift
Лично для меня Swift ассоциируется с самими продуктами Apple. Они предлагают идеально отполированный опыт использования, где нет ничего лишнего. В других языках программирования десяток видов массивов, которыми никто не пользуется. У Swift всего один и он — именно то, что нужно для работы. И такие аналогии можно построить во всем.
Swift быстрее. Производительность Swift почти такая же, как у C ++, который считается самым быстрым в алгоритмических вычислениях. Objective-C работает медленнее, потому что он содержит устаревшие C API.
Swift быстрее, чем Objective-C, потому что он устранил ограничения языка C. Его улучшили с помощью передовых технологий разработки программного обеспечения, которые были недоступны при разработке C. Как упоминалось в Apple, Swift изначально был разработан для более быстрой работы.
Несмотря на то, что языки разные, они оба интегрируются и работают с API-интерфейсами Cocoa и Cocoa Touch для всех платформ Apple. Следовательно, обычный пользователь приложения не заметит разницы в скорости работы между Objective-C и Swift. Скорость также зависит от уровня и способностей программиста, поскольку даже на Swift можно написать медленное приложение.
Swift безопаснее. Swift разработали, чтобы исключить ошибки с помощью его особенностей — generics и optionals для достижения стабильности приложения. Следовательно, приложения, разработанные на Swift, менее подвержены ошибкам и сбоям.
Синтаксис и количество кода. Синтаксис Objective-C считается многими программистами непонятным в основном из-за квадратных скобок, которые можно увидеть везде. К этому можно привыкнуть, но синтаксис Swift выглядит намного более знакомым любому человеку, который ранее работал хоть с одним С-подобным языком программирования. Также, Swift позволяет писать меньше кода, что положительно сказывается на его читабельности и дает больше шансов обнаружить ошибки.
Недостатки Swift
Разумеется, ни один язык программирования не идеален. У Swift я могу отметить лишь несколько существенных проблем.
Наибольшая боль для меня и многих моих коллег — протокол Decodable, который практически не поддается дебагингу. Мы используем его постоянно для парсинга данных, приходящих из API с сервера, а также других подобных задач. Если парсинг не срабатывает, очень сложно понять, в чем причина. Единственный адекватный вариант — писать инициализаторы для моделей. На них уходит время и они часто необязательны, если бы не проблема с дебагом.
Другие недостатки тянутся от самих разработчиков, не умеющих правильно использовать инструменты языка. Очень часто встречаются люди, использующие guard там где он неуместен (по сути вместо каждого if). Также, многие статьи на Medium и прочих подобных ресурсах дают сомнительные советы по стилю написания кода. Часто рекомендуют использовать Swift Package Manager, который несомненно неплох, но он даже близко не подходит к количеству доступных в Cocoapods или Carthage библиотек. В результате программист либо выбирает библиотеку на основе доступности, а не качества, либо имеет зависимости в двух менеджерах пакетов. Это само по себе очень неудобно.
Как научиться писать код на Swift
Как и любой популярный язык программирования, Swift имеет много платформ и ресурсов, где его можно изучать. Вот лишь некоторые из них:
- Разработка приложений с помощью Swift — книга, в которой объясняются основы и достижения языка. Она служит необходимой теоретической базой, если вы хотите стать разработчиком Swift.
- Введение в разработку приложений с помощью Swift — практический курса по разработке приложений. Учебное пособие описывает инструменты, техники и концепции, необходимые для работы с iOS. Также, вы узнаете о принципах дизайна пользовательского интерфейса и лучших практиках.
- Swift Playgrounds — среда разработки, интегрированная в Xcode на MacOS, которую также можно установить как приложение на iPad. По сути, это обучающая программа, которая научит вас в интерактивном режиме программировать на Swift.
И разумеется, можно начать прямо с документации на сайте swift.org, где подробно изложено все, что нужно знать для начала работы со Swift.
Для приверженцев более практического подхода к обучению я бы порекомендовал ресурсы Hacking with Swift и raywenderlich.com. Они так же отлично подойдут и для более опытных разработчиков, которые находятся в поиске решения типовых и не очень проблем.
Личный опыт, выводы, советы
Когда ко мне обращаются начинающие разработчики, или те, кто устал от своего направления и думает попробовать iOS разработку, чаще всего они задают вопрос: UIKit или SwiftUI?
Сейчас SwiftUI окружает огромный хайп не без причины. Это совершенно новый подход к построению интерфейса для платформ Apple, который не может остаться без внимания. И я вполне могу понять, почему он привлекает людей, особенно новичков.
Как я говорил выше, принцип написания интерфейса на SwiftUI — декларативный, во что намного легче влиться, если раньше не имел дело с разработкой для iOS. Практически каждый первый пост, который я вижу на LinkedIn и Reddit от людей, хвастающихся своими первыми проектами на iOS, содержит в себе слова Written in SwiftUI.
Не поймите меня неправильно: это замечательная технология, которая 100% имеет будущее, зная Apple. Но это будущее еще не наступило. Работая на SwitUI в продакшн-приложении, сталкиваешься с проблемами в самых тривиальных задачах, будь то перекраска Switch, отсутствие нативного Pull to Refresh и другие. Как ответственные технические специалисты мы должны помогать клиентам делать верный выбор касаемо технического стека. Я призываю всех оценивать здраво, подходит ли эта технология для вашего приложения сейчас, или стоит пока посидеть на старом добром UIKit.
Новичкам я советую учить UIKit в первую очередь, так как это та технология, на которой сейчас написано практически все. Есть большой спрос на специалистов с опытом именно в UIKit. На SwiftUI определенно стоит обратить внимание, но пока что только для личных проектов или экспериментов в свободное время.
Также новичкам не стоит бояться закрытости операционной системы и экосистемы Apple, о которой ходит много мифов и слухов, включая высокий порог вхождения. Да, вам все еще потребуется компьютер на macOS, но ничего более. Для 95% разработки вам хватит симулятора, что отбрасывает необходимость покупать iPhone. Знаменитая Apple Developer подписка тоже нужна только если вы хотите выложить приложение в App Store, но совершенно не обязательна для начинающего разработчика.
Помимо этого, я бы порекомендовал держаться подальше от агрессивных статей на Medium и подобных ресурсов, где часто советуют довольно спорные решения, выставляя это истиной в последней инстанции (пример с Swift PM как нельзя кстати). Имейте свою голову на плечах. Если вам действительно нужен совет, спросите более опытного коллегу — так вы точно получите более полезную информацию.
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів