Язык Swift против языка Objective-C


Содержание

Разработка под iOS: Swift vs Objective-C

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

Swift

Swift – язык, который не предъявляет жёстких требований к синтаксису. Apple исключили точку с запятой в конце строк кода, включили интерполяцию строк, конкатенацию с помощью знака «+». Параметры методов и функций перечисляются через запятую. На выходе – код проще писать и читать.

Swift помогает оптимизировать исходный текст. Разработчики языка добавили автоматическое управление памятью, которую занимает каждый объект программы. Функция доступна для объектно-ориентированного кода, процедурного кода, Cocoa и низкоуровневых API, таких как Core Graphics. Это значит – конечное приложение использует меньше ресурсов iOS и работает быстрее.

Код на Swift меньше подвержен ошибкам. Используются простые имена типа Array, Dictionary, String, которыми определяются названия класса или объекта. Внедрили опциональные типы для решения проблемы с «нулевыми указателями», ссылающимися на несуществующие данные. Так, программист тратит меньше времени разрабатывая приложение и исправляя ошибки.

Swift работает в 2.6 раза быстрее, чем Objective-C. Apple включила поддержку динамических библиотек, которые потребляют меньше ресурсов системы и поставляются, обновляются отдельно от исполняемых файлов приложений. Готовая программа занимает меньше памяти на устройстве.

Язык Swift интерактивный. В среде Xcode есть режим «живого» отображения работы программы, полезный для опытных программистов. В 2015 году, Apple открыла исходный код языка, позволив IOS разработчикам развивать его.

Популярные приложения, написанные на Swift: VSCOcam, LinkedIn, Yahoo! Weather, Clear.

Objective-C

За 32 года Objective-C развивался, добавляя новые функции, классы. 90% iOS программистов-фрилансеров разрабатывали приложения на этом языке. То есть – исполнителя проще найти и выбрать.

Документация Apple, курсы, книги базируются на Objective-C. Программист выбирает учебные материалы, смотрит на язык с других точек зрения, анализирует примеры и шаблоны. В результате – разработчик оптимизирует приложение, пишет лучшим способом.

Код Objective-C надёжный. Над языком велась работа над ошибками, системные библиотеки, фреймворки iOS написаны на нём. В результате – ресурсов на поддержку приложений Objective-C тратится меньше.

Заключение

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

Если вы заказчик, у которого приложение на Objective-C, не переписывайте на Swift – затратно. Для новых проектов открыт выбор – старый язык со своими преимуществами поддержат еще несколько лет, но новый будет получать обновления. Новые функции iOS Apple реализует на Swift.

На каком языке пишут iOS приложения Objective C или Swift? [закрыт]

Я нашел пару обсуждений в которых говорилось о том, что первично был Objective C и уже сейчас Swift.

Если я новичок в iOS (есть опыт в андроиде) как понять с какого языка начать изучение iOS ? Или следует изучать их параллельно?

Swift это как Kotlin в Андроиде?

Правка

Как быть в такой ситуации.

У меня есть приложение на андроид и я хочу его выполнить на иос.

На каком языке начать писать с нуля?

Закрыт по причине того, что необходимо переформулировать вопрос так, чтобы можно было дать объективно верный ответ участниками Max Mikheyenko, user181100, αλεχολυτ, Nofate ♦ 12 окт ’16 в 20:16 .

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

2 ответа 2

Objective C — это вчера, Swift — это сегодня и завтра

Начинайте изучать Swift

Но стоит обратить внимание, часто ведь нужно поддерживать предыдущие приложения, а они могут быть написаны на Objective C

Objective C — это стабильность, много учебных материалов и большое комьюнити, Swift — это побаловаться в новыми замутами, отсутствие ABI stability и непойми что там они надумают завтра

Начинайте изучать Objective C

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

H Swift или Python: какой язык учить в 2020 году? в черновиках Перевод

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

Популярность того или иного языка программирования меняется каждый год. Некоторые из них «выходят их моды», в то время как другие стремительно растут. Последние несколько лет можно выделить 2 крупных языка, которые растут как на дрожжах: Swift и Python.

Согласно недавней статистике PYPL, Python занял первое место по популярности среди языков программирования. Что же можно сказать про Swift? Этот довольно новый язык от Apple скорее всего будет следующим на пьедестале. Swift был выпущен в 2014 году и умудрился занять 10-е место в классификации RedMonk’s 2020 всего за 5 лет. Неплохо для новичка, не находите?
В этой статье мы постараемся разобраться, почему оба этих языка так быстро набирают популярность. А так же поможем с ответом на вопрос: «Если Swift и Python такие популярные, то какой язык выбрать для изучения?»

Python: за и против

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

Популярность Python и сферы применения

Перед тем как перейти к за и против, давайте взглянем на статистику. Не только PYPL заметил необычный рост популярности Python. В 2020 году Stack Overflow так же объявил Python самым быстрорастущим языком программирования основываясь на данных от Stack Overflow Trends.
Число компаний, использующих этот язык тоже резко возросло. Среди них: Quora, Netflix, Dropbox, Reddit, Facebook, Spotify, Instagram и многие другие.

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

Основные преимущества Python

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

Легкий
Главная особенность- это простая структура кода и его удобочитаемость. Python точно не относится к пространным многословным языкам, но выглядит очень похожим на английский. Тем не менее его удобно читать и использовать. Что еще важнее, язык подходит новичкам в программировании. Руководство по стилю оформления кода PEP8 подробно описывает как лучше писать код, чтобы он был понятен другим программистам не зависимо от их уровня разработки.

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

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

Интеграция с другими языками
Python это расширяемый и встраиваемый язык, его легко можно интегрировать с C, C++ и Java приложениями.

Мобильный (переносимый)
Python совместим с различными платформами, поэтому нет необходимости менять код, если вы хотите добавить поддержку другой платформы.

Имеет много библиотек
Python достаточно старый язык, поэтому было написано множество библиотек и фреймфорков для различных целей: от веб разработки до машинного обучения. Стандартная библиотека уже предоставляет довольно широкий спектр возможностей. Но помимо этого существуют такие библиотеки как NumPy, Pandas, Plotly, Pipenv и другие. Среди самых популярных: Django, Flask, CherryPy и PyTorch.

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

Мобильная разработка
Если вы хотите стать мобильным разработчиком, то выбирать Python не лучшее решение. Но если вы готовы к приключениям, то можете попробовать освоить кросс-платформенный питоновский фреймворк Kivy для разработки мобильных приложений.

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

Большое потребление памяти
Python характеризуется тем, что потребляет много памяти, поэтому его лучше не использовать для трудоёмких задач.

Swift: за и против

Swift довольно молодой язык программирования. Его представили на конференции WWDC в 2014 году. Модный, быстрый, интерактивный – вот основные фишки языка по заявлению Apple. Создатель языка Chris Lattner заявил, что созданию Swift способствовали такие языки, как Ruby, C# частично Python (поэтому между ними можно найти много общего).

Сферы применения и популярность

В июле 2020 Swift достиг 11-й позиции в индексе Tiobe “Топ 50 языков программирования”. В выше упомянутом рейтинге PYPL, Swift располагается на 9-м месте. Логично, что раз Swift был придуман Apple, то и используется он в первую очередь для создания приложений на iOS, ПО для MacOS, watchOS и даже tvOS. Hubspot app, Lyft, Pandora, OpenTable, Airbnb, LinkedIn, Yahoo Weather и Khan Academy, это небольшой список приложений, написанных на Swift

Swift продолжает развиваться. На конференции WWDC 2020 Apple представила Swift 4. В этом году компания представила Swift 4.2 с несколькими улучшениями. Так же Apple анонсировала Swift 5, который будет выпущен в 2020 году. Это означает то, что популярность языка будет только расти.

Главные преимущества Swift

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

Цукерберг рекомендует:  Notebook - Как выбрать ноутбук для программирования.

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

Безопасный
Ещё одна сильная сторона Swift, это его функциональная безопасность. Этот статически типизированный язык позволяет программистам быстро находить ошибки еще до компиляции и устранять их. Более того, с помощью указателя nil разработчики могут избавиться от ошибок компиляции, вызванных нулевыми ссылками (null).

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

Имеет открытый исходный код
В Swift появился открытый исходный код в 2015. Это событие сильно повлияло на популярность языка. В 2015 он стал любимым языком пользователей Github, а в 2020-м занял второе место.

Имеет большой потенциал
Благодаря тому, что теперь Swift имеет открытый исходный код, Apple сделала шаг к тому чтобы он стал кроссплатформенный. Теперь он доступен на Linux. Apple так же обещает, что он будет доступен и на Windows. Технический гигант IBM так же сильно поспособствовал развитию языка. Компания представила тестовую среду Swift (Sandbox) и сделала доступным в облаке. Таким образом серверная часть Swift может быть интегрирована с большим числом серверных инструментов.

Функционально совместимый
Благодаря интеграции с библиотекой исполнения программ Objective-C (Objective-C Runtime Library) можно писать программы на Swift, C, Objective-C, и C++ одновременно.

У Swift есть несколько нерешенных проблем из-за того, что язык довольно молодой. Apple работает в поте лица над их устранением, а так же над тем, чтобы сделать Swift многофункциональным. Но все же мы нашли несколько недостатков:

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

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

Нестабильность
Многие разработчики жалуются на одну и ту же проблему. Из-за изменений, представленных в новой версии языка, Swift ведет себя очень нестабильно. Это значит, что если разработчик хочет перейти на новую версию языка — ему нужно будет переписать код. Правда, эта проблема была частично решена с помощью Swift Migration Tool в XCode, что сделало миграцию на 4-ю версию языка довольно простой задачей.

Python или Swift: Какой язык выбрать в 2020 году?

Теперь, когда вы ознакомились с сильными и слабыми сторонами обеих языков, пришло время выбирать, какой же из них подойдет именно вам?

Что же общего у Python и Swift

Может показаться, что Swift и Python абсолютно разные языки, но тем не менее у них есть много общего. Прежде всего, это простота в использовании. У обоих простой синтаксис и схожесть с английским языком. Каждый программист знает, как грустно бывает, когда IDE показывает “Пропущена «;»” после долгой компиляции. У вас не будет проблем с этим в Swift или Python.
В обоих языках среда программирования RELP, которая способствует быстрому нахождению и исправлению ошибок. Они оба являются многопарадигмальными. Более того, у каждого есть дополнительная среда для более легкого изучения языка (Python IDLE для Python и The Playground для Swift). А также можно найти прекрасную документацию для Swift от Apple, доступную в iBooks.

Итак, мы разобрались, что Swift и Python используются для разных целей. Swift прекрасно подходит для разработки ПО для Apple, а Python имеет широкий спектр применения, но в первую очередь используется для бэкэнд разработки.

Еще одно различие – в производительности. Как понятно из названия, Swift довольно быстр, Apple заявляет, что он в 8.4 раза быстрее, чем Python.

Когда разработчик выбирает язык программирования чтобы начать обучение, он так же принимает во внимание и востребованность на рынке труда. На сегодняшний момент можно найти более 6000 вакансий разработчиков на Swift и 58000 на Python. Средняя зарплата разработчика Python примерно $114,492 в год, Swift — $111,158 в год.

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

Swift vs Objective-C vs Си

Разработчик из Сан-Франциско, Джесси Сквайрс (Jesse Squires), опубликовал в своем блоге сравнительные результаты тестирования приложений, написанных на трех разных языках программирования: Swift, Objective-C и Си.

Напомним, что первый из них был анонсирован разработавшей его Apple в первый день WWDC 2014, и вместе с графическим интерфейсом Metal (который согласно компании демонстрирует 10-кратный прирост графической производительности по сравнению с традиционным OpenGL) стал главным событием этой конференции (хотя большинство обычных пользователей яблочной продукции возможно больше заинтересовала презентация OS X Yosemite и iOS 8). Swift пришел на смену Objective-C — языка программирования, ставшего объектно-ориентированным расширением процедурного языка Си и используемого разработчиками платформ Apple аж с 1983 года. Таким образом, выход Swift ознаменовал завершение 21-летней эпохи языка Objective-C. Неудивительно, что на новичка (имя которого в переводе на русский звучит как «быстрый») возлагаются большие надежды. И судя по результатам проведенных Джесси Сквайрсом испытаний, эти надежды всецело оправдываются.

Быстродействие языков тестировалось путем замера скорости сортировок, алгоритмы которых были написаны на всех трех языках. Главный интерес представляют результаты по Swift и Objective-C, классический Си использовался как своего рода критерий. Скорость выполнения написанных на нем программ благодаря низкому, приближающемуся к машинному, уровню абстракции, является очень высокой по сравнению с языками высокого уровня (к категории которых относятся Swift и Objective-C). Те в меньшей степени учитывают особенности компьютерного железа, удобнее в написании прикладных программ, но по этой же причине медленнее работают.

Результаты испытаний варьируют в зависимости от заданных уровней оптимизации при компиляции исходного кода, а также бета-версий Xcode 6 — интегрированной среды разработки под операционные системы OS X Yosemite и iOS 8. В ранних первых тестах, начиная со 2-ой бета-версии Xcode 6, при отключенной или установленной по умолчанию стандартной оптимизации, Swift вчистую проиграл своему предшественнику, обойдя его только при самом высоком (т.е. более быстродействующем, но и в большей степени подверженном ошибкам) уровне оптимизации кода. В следующих тестах, с очередными бета-версиями Xcode 6 (5-ой и 6-ой), быстродействие Swift значительно возросло: по-прежнему значительно уступая Objective-C при отключенной оптимизации, Swift превзошел его на стандартной оптимизации от 6 до 18 раз, а на высокой — от 7 до 35 раз, в зависимости от типа сортировки. Согласитесь, это очень впечатляющий прирост быстродействия, демонстрирующий явное превосходство Swift по сравнению с Objective-C.

Что касается сравнения с Си (эти результаты Джесси Сквайрс опубликовал как раз сегодня), то и здесь новый язык программирования не упал лицом в грязь: на среднем и максимальном уровне оптимизации Swift уступил Си самое большее в 4.5-раза, ухитрившись превзойти его в 1.5-2 раза в одном из алгоритмов сортировки.

Подчеркиваем, что речь идет о бета-версии, выпущенной полтора месяца спустя после первого релиза. Не исключено, в последующих версиях производительность приложений, написанных на Swift и скомпилированных в Xcode 6, окажется еще выше.

Swift и Objective C борются за место в рейтинге RedMonk

Аналитическая компания RedMonk опубликовала рейтинг языков программирования за третий квартал 2020 года. На этот раз топ-10 языков программирования покинул Swift, спустившись на одиннадцатую строчку. Его место занял «соперник» Objective-C.

О языке

Swift – язык программирования, созданный компанией Apple. Он ориентирован специально на создание программ для операционных систем iOS и MacOS X. Главный разработчик языка Крис Латтнер, который также создавал LLVM – универсальную систему анализа, трансформации и организации программ.

По словам вице-президента Apple Крейга Федериги, Swift заимствовал идеи не только из Objective-C, а еще из Ruby, C++, C# и многих других языков. Apple презентовала новый язык программирования в 2014 году на Всемирной конференции для разработчиков в Сан-Франциско.

Создание языка Swift было необходимо Apple для наведения порядка в App Store. Разработчики писали на разных языках программирования, что в некоторых случаях замедляло работу MacBook и IPhone. Новый язык позволил унифицировать все программы.

Презентация Swift на Всемирной конференции для разработчиков Apple

Сравнение с Objective-C

В рейтинге RedMonk со Swift конкурирует другой язык программирования – Objective-C, который появился в 1983. В Apple его используют по сей день, но для большинства независимых разработчиков он не так актуален. У Objective-C перед Swift есть несколько преимуществ:

  • документация и сообщество, которые позволяют программисту затрачивать меньше усилий в поиске ответа на нужный вопрос;
  • гибкость дает возможность по-разному написать один и тот же алгоритм;
  • простота понимания алгоритмов.

При этом его читаемость по сравнению со Swift остается невысокой, а функционал – ограниченным.

Основные недочеты Swift связаны, прежде всего, с молодостью языка. Например:

  • меньшая аудитория сообщества;
  • ошибки, которые в других языках не встречаются: например, ошибки синтаксиса и использование аргументов за пределами массива;
  • требование минимальных знаний Objective-C.

Но у него есть и свои плюсы. Для написания приложения в Swift требуется меньшее количество кода, его отличает возможность управления памятью и высокая степень безопасности. Кроме того:

  • Swift совместим с Objective-C и может использоваться в одной программе;
  • сборка приложений проходит быстрее, чем у аналогов: почти в 4 раза быстрее, чем в Python;
  • Swift устойчив к ошибкам;
  • легко читается даже новичками.

Пример кода на Swift

Перспективы

Самая последняя версия Swift 4.1 вышла в марте 2020 года. К этому моменту в версиях 2.0 и 3.0 язык программирования получил повышенную производительность, улучшения синтаксиса языка и поддержку операционных систем OS X, iOS и Linux.

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

По некоторым данным, в 2020 году Google обратила внимание на детище Apple, объявив о намерениях сделать его «первым языком» Android. Напомним, что Google и Oracle в течение нескольких лет судятся за право использовать Java в ряде пакетов разработки Android. Судя по тому, что удача в большинстве споров не на стороне Google, создателям Android может понадобиться альтернатива Java.

Надо учить swift?

Вы б сразу опубликовали курсы, книги, и все такое.

Да вроде бы нет.

Пример кода на Swift меня повеселил. Это он легко читается новичками?

имеет ссылку и там примеры действительно выглядят просто.

Пример же кода на Swift скорее призван поразить разработчиков прежнего языка Objective C, на смену которому пришел Swift. Тот же пример на Objective C выглядел бы гораздо страннее (сам когда то пробовал программировать на этом языке, очень своеобразный язык, как в общем то многое из мира apple).

Цукерберг рекомендует:  Objective c - помогите решить проблему с CoreData

(1) Ну это только, если Вы планируете программировать под устройства apple.

Тому что в статье сказано про google уже более 2х лет. Хотя возможно еще не время.

Вообще идея статьи, как я понимаю, пролить свет на мир вне языка 1С. Язык Swift самый молодой из языков, на данный момент является основным языком программирования apple и разработан ей же.

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

Еще одна его особенность в том, что среди языков программирования под мобильные устройства он является прямым конкурентом java, а java — это google. Однако пикантность в том, что java принадлежит Oracle и за его использование нужно платить лицензию, а swift разработан самой apple и на данный момент не требует лицензии на использование и распространяется с открытым кодом.

Swift также развивается более динамично, чем java. Если Swiftу удастся преодолеть границы экосистемы apple (он доступен под linux), то у него есть немало шансов подмять под себя тот же python и помочь ему в этом может как раз компания Google.

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

В чем преимущества Swift над Objective-C


Чтобы просмотреть это видео, включите JavaScript и используйте веб-браузер, который поддерживает видео в формате HTML5

Введение в iOS-разработку

Half Faded Star

Курс посвящён изучению языка программирования Swift. Swift является основным языком разработки приложений под такие операционные системы, как iOS, macOS, watchOS и tvOS. Во время обучения вы познакомитесь как с азами разработки — переменными, классами, циклами, протоколами, так и с более сложными темами — дженериками, замыканиями и ассоциированными типами. Мы сконцентрируемся на особенностях Swift и тех парадигмах, которые он предлагает для написания производительного, красивого и понятного кода.

Рецензии

Half Faded Star

Первая неделя – вводная. Мы познакомимся со специализацией и рассмотрим какие знания вы получите после прохождения первого курса. Поговорим о том, зачем вообще Apple создала новый язык и в чем его преимущества. После этого мы расскажем как установить и настроить среду разработки Xcode.

Преподаватели

Юрий Петухов

Ильдар Гильфанов

Илья Кулебякин

Текст видео

Привет! В этом видео мы сравним Swift и Objective-C, рассмотрим недостатки последнего, которые и подтолкнули Apple к созданию нового языка. Если что-то из перечисленного далее вам не понятно, переживать не стоит — в нашем курсе мы объясним значение всех терминов, и вы сможете позже вернуться к этому видео и понять, чего же мы были лишены до выхода нового языка от Apple. Swift похож на C-подобные языки программирования. Например, вместо квадратных скобок для вызова методов используется более привычная dot-нотация. Это делает язык более привычным и понятным для многих разработчиков. Однако по предоставляемым возможностям — он, скорее, Objective-C без C-составляющей. Благодаря этому он хорошо подходит для начинающих. Им не придется разбираться с указателям, импортом заголовочных файлов и прочими особенностями C. При этом Swift не только перенял полезные возможности своего предка, но и добавил много нового. Он стал намного большим, чем просто Objective-C без C. Для начала давайте рассмотрим, что Swift перенял у своего предшественника. Пожалуй, самое заметное — это расширения. Swift тоже позволяет добавлять новые методы существующим сущностям, в том числе и тем, чьи исходники вам недоступны. С расширениями тесно связаны протоколы. Apple выводит их на новый уровень, называя Swift протоколоориентированным языком программирования. Замыкания представляют из себя блоки кода, которые можно передавать из функции в функцию. При этом они захватывают переменные и не дают им удалиться из памяти. Так же, как и в Objective-C, в Swift используется автоматический подсчет ссылок. В большинстве случаев вам не придется задумываться о том, когда удалить объект из памяти. Менее заметная на первый взгляд возможность — это динамическая диспетчеризация. Она позволяет выбирать конкретную реализацию метода во время выполнения программы, а не на этапе компиляции. Также в Swift сохранены многие синтаксические конструкции из Objective-C: квадратные скобки для создания массива, обращение к экземпляру из метода через self, основные типы данных, а также многие операторы и ключевые слова. Перейдем к различиям. Swift был создан с целью упростить создание и поддержку программного обеспечения. Для этого он должен быть безопасным, быстрым и выразительным. Исходя из этих принципов, были внесены изменения в существующие конструкции C и Objective-C при реализации их аналогов в Swift. Например, указатели в привычном нам виде отсутствуют. Классические указатели не являются безопасными. Арифметика указателей, и типизированный void *, и возможность произвольного доступа к неопределенному участку памяти — это потенциальные источники багов, которые будет очень сложно найти. В Swift на начальном этапе вам, скорее всего, вовсе не понадобятся указатели. Для продвинутых разработчиков имеются несколько видов указателей, отличающихся поведением, но спроектированных так, чтобы быть максимально безопасными. Следующее важное различие — это отсутствие нулевых указателей. Термин, придуманный Энтони Хоаром, был назван ошибкой на миллиард долларов. Нулевые указатели — это причина огромного количества ошибок и уязвимостей. Конечно, нам необходима возможность как-то выражать отсутствие значений, и она у нас есть. Для этого нужно использовать опциональные значения. Они имеют строгую типизацию, и вы обязаны в своем коде обработать ситуации, в которых вы получаете null. К тому же опциональными могут и примитивные типы данных. В Objective-C для этого приходится использовать специальные значения — например, NSNotFound, являющаяся просто константой, равной NSIntegerMax. Однако это небезопасно. Вам нужно следить, чтобы допустимые значения случайно не пересеклись со специальными. Помимо безопасности опциональные значения делают код более понятным. Разработчик, читающий ваш код или использующий ваш интерфейс, всегда будет знать, что функция может вернуть пустое значение. Для этого даже не требуется читать документацию. Вообще, строгая типизация — это одно из важнейших преимуществ Swift. Благодаря ей у компилятора есть возможность подсказать вам, если вы ошиблись с типами. Однако несмотря на это нам не всегда необходимо указывать тип явно. В большинстве случаев компилятор сам выберет корректный тип переменной или константы. Благодаря этому код становится более лаконичными, но остается понятным для разработчиков. Также в Swift есть некоторые базовые элементы функционального программирования. Трансформация коллекций осуществляется вызовом цепочки соответствующих методов и передачи в них функций. Они содержат логику, которая будет применяться для каждого элемента в коллекции. Возможности перечислений были значительно расширены — они могут хранить любые типы данных, а также иметь свои методы и реализовывать протоколы. Еще одна важная особенность Swift — это поддержка Unicode-строк. Работа со строками проектировалась таким образом, чтобы обеспечить максимально корректную работу составных графических символов. В отличие от обычного массива ASCII-символов графемы Unicode могут занимать различный объем памяти. Поэтому поддержка Unicode — это очень нетривиальная задача. Но Swift все сделает за вас. В Swift есть множество других мелких особенностей. Нет необходимости ставить точку с запятой в конце каждой строки. Есть возможность переопределять операторы или создавать новые. Оператор присваивания не возвращает значения, чтобы его нельзя было случайно перепутать с оператором сравнения и многими другими. О них мы будем рассказывать в соответствующих лекциях. Конечно, мы перечислили далеко не все различия между языками, однако, надеемся, что вы поняли, в чем была задумка создателей нового языка от Apple. В будущем, разобравшись с ними получше, вы поймете, почему он был реализован именно так, а не иначе. С будущими и прошлыми изменениями языка можно ознакомиться на сайте Swift Evolution, а подписавшись на рассылки, вы можете следить за обсуждением разработчиков о будущем Swift и даже принять в них участие. На этом мы закончим обсуждение языка Swift и перейдем к установке и настройке среды программирования Xcode.

Swift vs Objective-C Сравнение скорости последовательности Фибоначчи

У меня проблема. Я хочу знать, какой из них действительно быстрее (Swift или Objective-C), потому что я хотел бы выбрать более быстрый/лучший, когда приступаю к разработке приложения. Согласно многим источникам (например, Apple WWDC, или http://www.jessesquires.com/apples-to-apples-part-two/), Swift должен быть быстрее.

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

Однако, когда я запускаю fib (35) на симуляторе, я получаю неожиданные результаты:

Objective-C Результат:

: fib:: 9227465: duration: 0.122813 секунд

Быстрый результат

: fib:: 9227465: duration: 0.606831073760986 секунд

Теперь я даже запускал версию Swift на всех уровнях оптимизации Swift Compiler (для Debug), который является None, Fastest, Fastest-Unchecked. Я также играю с уровнем оптимизации генерации кода до None, Fast. Fastest Aggressive Optimization. Однако все результаты Swift — это что-то близкое к 0,6 миллисекундам

Теперь последнее, о чем я могу думать, может быть, я сравниваю Apple с Orange? Вы, ребята, видите что-то, что мне не хватает здесь? Есть ли что-нибудь еще, что мне нужно включить (кроме уровней оптимизации для Swfit Compiler и Apple LLVM Code Generation), чтобы заставить программы Swift работать быстрее?

Любые предложения или комментарии приветствуются и оцениваются! ^^!

Objective-C Версия

Быстрая версия

Objective-C Измерение времени

Быстрое измерение времени

Много вещей, которые следует учитывать при выборе того, какой из двух языков программирования быстрее. Я сделал пару тестов (https://github.com/vsco/swift-benchmarks) между Swift и Objective-C, и я обнаружил, что в некоторых случаях Swift был быстрее и в других случаях Objective-C был быстрее. Например, использование структурных объектов в Swift позволит получить огромную прибыль, если вам нужно работать с большим количеством данных. Напротив, использование неструктурных объектов сделало Swift значительно медленнее, чем его копии Objective-C.

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

Уверен, что он отлично подходит для минимизации повторяющегося кода, но когда я выполнил этот метод более 1 миллиона объектов Int, потребовалось примерно 32 секунды для завершения. В отличие от нестандартной реализации, которая заняла только 0.181 секунды.

Я также рекомендую не использовать функции NSDate для бенчмаркинга в Swift. Я наткнулся на несколько ошибок, из-за которых NSDate возвращал неправильные времена. Гораздо лучше поставить свои тесты в XCTestCase и использовать функцию measureBlock() .

Выбор Фибоначчи в качестве эталона немного ироничен, потому что в WWDC 2014 видео Advanced Swift они используют последовательность Фибоначчи как пример того, как вы можете написать generic memoize , которая на несколько порядков выше.

Теперь, очевидно, несправедливо сравнивать это с неоптимизированной рекурсивной функцией Фибоначчи Objective-C, потому что это оставит ее в пыли. Я даже не уверен, что согласен со всеми выводами WWDC относительно достоинств реализации memoize Swift generic. Но улучшение производительности поражает.

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

Цукерберг рекомендует:  Помощь - Что лучше Python or JavaScript

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

Кроме того, вы говорите, что в отношении выбора языка программирования вы «хотели бы выбрать более быстрый/лучший». Я бы оспорил, что «более быстрый» язык всегда «лучше» (в противном случае мы все еще будем писать код сборки). Часто выбор языка — это меньшая вычислительная эффективность кода, а также более высокая эффективность разработчика. Мы все должны выбрать язык, на котором мы можем написать наиболее надежный код, сделать это наиболее экономичным способом, написание кода, который наиболее легко поддерживается в будущем, и обеспечить превосходный пользовательский интерфейс.

Является ли этот язык Swift или Objective-C вопросом мнения и не для этого форума.

Можно ли освоить Swift без изучения Objective-C?

Из лирики:
Хочу начать изучать swift, из опыта — давно освоен html.
Читаю форум — пишете, что без ObjC никак нельзя. Развенчайте мои ожидания — является ли язык swift возможностью освоить программирование с нуля (мимо «сложного» ObjC) и, возможно, найти свое призвание — или это иллюзия, и нужно было потратить годы, и апгрейдить свой мак ни с того ни с сего до ysmt — это порыв и не более, а уж думать о заработке и вовсе эйфория?

Заранее благодарю за заботу

26.08.2015, 19:22

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

Перевести код с Objective-C на Swift
NSURLRequest *request = completionBlock:^(NSString *ssoKey, NSError *connectionError, BNGAPIError.

Что использовать: Swift или Objective-C?
Добрый ночи, возник такой вопрос на чем лучше сейчас писать программы (Swift, Objective-C)/ Вижу.

Учить ли Objective-C новичку или сразу Swift?
Хочу начать изучать программирование под iOS есть ли смысл учить старый Objective-C или можно сразу.

Как быстро можно освоить C# после изучения C++
Здравствуйте! Скажите пожалуйста, если я изучу С++, то за сколько времени смогу изучить С#?

Swift и Objective-C: 10 отличий

В июне 2014 года в мире Apple случилось то, чего не ожидал никто: компания Apple представила новый объектно-ориентированный язык программирования — Swift, который пришел на смену Objective-C, используемого ранее для разработки приложений для OSX & iOS.

В нашей компании это встретили с большим энтузиазмом и сразу решили его «пощупать». И это не удивительно, так как сразу после появления Swift появились и слухи о его простоте, доступности и удобстве, что немаловажно для больших проектов.

Выполнив парочку проектов — iOS приложений на Swift, я решил поделиться нашими наблюдениями. В частности — тем, что понравилось больше всего. Результат представляю в виде десяти отличий с примерами кода.

1. Playgrounds

Действительно классная штука, когда нужно с чем-то поэкспериментировать, что-то проверить или попробовать. Новое преимущество в XCode 6, которое заключается в том, что программисту предоставляется пространство для экспериментов.

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

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

2. Классы больше не разбиваются на интерфейс и реализацию

Это вдвое уменьшает количество файлов в проекте, что в свою очередь упрощает навигацию по нему.

Из данных отличий мы видим, как упростился код — в Swift он стал не таким громоздким, удобным для написания и применения.

3. Упрощен синтаксис создания полей и свойств классов

Свойства больше не нуждаются в instance variables. Раньше, в последних версиях ObjC, эти iVars создавались автоматически, но их можно было прописывать и вручную. Теперь же их нельзя создать в принципе, а значит о них больше не нужно помнить и думать.

Свойства в Swift могут быть изменяемыми (объявляется как var myField) и константами (объявляется как let myField).

Если пример выше изменить как:

то после объявления и инициализации класса:

var mc = MyClass(a: 2, b: «string»

изменить это поле уже не получится:

mc.a = 3 //error: Cannot assign ‘a’ to mc

тогда как другое поле изменяется без проблем:

mс.b = «another string»

На Objective-C напрямую это можно сделать, только прописав вручную сеттер для поля и использовав в нем NSAssert. Но даже в этом случае можно будет использовать доступ к полю напрямую (не через свойство) внутри класса:

Если мы хотим действительно неизменную константу в Objective-C, мы не можем инициализировать ее в конструкторе класса, а должны сделать это при её объявлении:

4. Появились Optional Types

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

и условный вызов:

Для сравнения, в Objective-C эти строки выглядели бы так:

При этом NSNumber — класс-наследник NSObject, и его инициализация — затратная операция.

Также другое значение имеет nil. В Objective-C он означает, что указатель никуда не указывает, а в Swift он означает «ничего».

5. Вывод типов (Type inference)

Не нужно прописывать тип, когда он понятен. Следующие строчки кода эквивалентны:

Так как мы используем строковую константу, понятно, что тип переменной — String.

Если мы впоследствии попытаемся использовать ее по-другому, получим ошибку:

6. Доработано управление памятью

Модель осталась той же: Automatic Reference Counting (ARC), остались strong & weak references. Но — слабые ссылки теперь представлены с помощью Optional values, что логично. Плюс к ним добавились unowned references, которые используются, когда применение strong недопустимо из-за создания циклических ссылок (которые приводят к утечкам памяти), а применение weak недопустимо по логическим причинам (мы не хотим, чтобы поле было опциональным и изменяемым).

В таком виде мы создали циклические ссылки: person -> creditCard, creditCard -> person.

Если мы изменим тип ссылки на weak:

То получим нарушения бизнес-логики:
— карта не может существовать без владельца, а у нас CreditCard.person может быть nil, т.к. для weak-ссылки используется Optional type (holder: Person?);
— владелец карты в нашей модели может меняться (var holder), а в реальности — нет

Чтобы исправить ситуацию, нужно использовать unowned:

Теперь бизнес-логика сохранена, и управление памятью происходит правильно: когда удаляется карта, владелец остается; при удалении владельца удаляется и его карта.

Для сравнения, финальный вариант конструкции в Objecitve-C выглядел бы так:

При этом свойство holder, которое мы объявили для держателя карты, имеет тип ссылки unsafe_unretained. Это значит, что когда мы удалим объект держателя карты, ссылка в объекте карты будет продолжать показывать на прежнюю область памяти, образуя так называемый daggling pointer, при попытке разыменования которого мы получим runtime error.

В Swift этого не случится, т.к. unowned reference is still safe, т.е. будет установлена в nil при удалении объекта, на который она показывает.

7. «Прокачан» switch

Он теперь умеет делать выбор не только по int или enum (которые в С/ObjC представлялись с помощью того же int), а по всем новым вкусностям, таким как кортежи, диапазоны значений, списки значений, wildcards, а также по строкам, классам и структурам. Теперь он по умолчанию не проваливается (можно заставить) и требует наличия default-case.

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

8. «Прокачан» enum

Его значением (raw values) теперь могут быть строки, символы, целые и дробные числа:

Пример использования (определяем тип символов перевода строки):

Программа выведет в консоль следующее:

Здесь была пара ключевых моментов:
— key 1 — при поиске по строке мы используем константы, прописанные в перечислении, добывая их из значений enum`a с помощью метода .toRaw();
— key 2 — при проверке, чем же именно заканчивается строка, мы делаем обратное преобразование с помощью метода .fromRaw(), что было невозможно в Objective-C.

Эквивалент на Objective-C:

Также enum обзавелся associatedValues. Это значения, которые могут быть присвоены какому-то из case-ов.

На Objective-C реализовать такое можно только при помощи класса:

Здесь, чтобы скрыть поля класса, мы создали безымянную категорию TrainDelay(), а в интерфейсе класса оставили только методы. Для установки _trainDelayState пришлось создать два метода, чтобы учесть, что одно из состояний имеет дополнительный параметр, а другое его иметь не может.

По примерам делаем вывод, что со Swift мы выигрываем в читаемости, в длине кода и в работе с обратным преобразованием по методу .toRaw(), что абсолютно невозможно в Objective-C.

9. Добавлены возможности функционального программирования

В Swift есть функции высшего порядка, функции как значения, вложенные функции, замыкания, анонимные функции, идиомы .map(), .each() и прочие атрибуты настоящего функционального программирования!

В ObjC для этого можно использовать блок:

Но в Objective-C получилось в 4 раза больше кода, пропала ясность, и второй массив не получилось сразу сделать immutable — пришлось делать копию.

10. Появились Generics

В ObjectiveC вместо этого использовался тип id — указатель. Чтобы повторить этот пример на нем, нам снова придется использовать класс, так как в ObjC структуры не могут содержать методов. Хотя, на самом деле, можно извратиться через указатели и явную передачу параметра self, но вряд ли кто-нибудь будет применять это на практике.

Видим ту же картину, что и в предыдущих примерах: в Swift всё стало лучше. Меньше кода и лучшая читаемость по сравнению с Objective-C.

Заключение

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

Несмотря на пессимизм и консерватизм многих компаний, основанный на множестве заявлений о том, что язык сыроват и есть проблемы с Xcode, что присутствуют недочёты, связанные с плохой автодоводкой кода (autocompletion), что есть недостаточная поддержка фреймворка для создания iOS приложений — UIKit, Redwerk уполномочен заявить — Swift экзамен сдал!

Хотели бы мы, чтобы все эти 10 полезных особенностей были доступны, когда мы разрабатывали iOS-приложения для ведущих американских новостных телеканалов. Они существенно облегчили бы нам жизнь.

Please verify you are a human

Access to this page has been denied because we believe you are using automation tools to browse the website.

This may happen as a result of the following:

  • Javascript is disabled or blocked by an extension (ad blockers for example)
  • Your browser does not support cookies

Please make sure that Javascript and cookies are enabled on your browser and that you are not blocking them from loading.

Reference ID: #7d9c1740-076e-11ea-8988-a79d9c94a48e

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих