Яблочное сравнение Swift vs Objective-C


Содержание

Какой язык учить: Objective C или Swift для разработки под iOS и OS X?

Хочу спросить у практикующих разработчиков программ\приложений под iOS и OS X.

Стоит ли на старте изучать старый язык программирования Objective C или лучше сразу начинать учить новый язык программирования Swift?

Ведь по словам Apple: Swift создан что бы заменить Objective C.

Я понимаю что в перспективе нужно будет знать оба, так как старое программное обсечение написано на Objective 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: #19325f30-076e-11ea-8f95-93ad541441e8

Swift vs C#

Сейчас с семьёй едем в Орландо в Disney World, а пока жена сидит за рулём, я решил сравнить Swift и C#.

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

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

На C# можно писать н только под Windows, но и под почти все доступные платформы, включая PlayStation Vita (на счёт PS4 не знаю) и популярный сейчас Web.

Цукерберг рекомендует:  Обучение - Немецкий язык

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

Но вот C#, все же обладает большим количеством приятных фишек и бирюлек. Если говорить о мощи, то по функционалу C# просто разрывает Swift в клочья. Тут даже и сравнивать особо нечего. Но если говорить о красоте кода, то мне почему-то нравится Swift. Это уже лишнее предпочтение. Меня начали бесить точки с запятой и без них мне код нравится больше. Он чище, естественнее, красивее. Но это моё личное ощущение. Если кому-то нравится академичность, то скорей всего вы предпочтете C#.

Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


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

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

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

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

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

. Фибо . 9227465 . продолжительность . 0.122813 секунд

Swift Результат

. Фибо . 9227465 . продолжительность . 0.606831073760986 секунды

Теперь, я даже побежал Swift версию на всех уровнях Swift Compiler оптимизации (для отладки), который является None, быстрый, быстрый-Неконтролируемый. Я также играть с поколения уровня оптимизации кода на None, Fast . Быстрейший Агрессивная оптимизация. Однако все Swift результаты что-то близкое к 0,6 мс

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

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

Objective-C Версия

Swift Version

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

Измерение времени Swift

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

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

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

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

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

Где вы можете затем:

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

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

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

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

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

Objective-C vs Swift Comparison. What to Сhoose for Mac OS X Programming?

Since its introduction over 2 years ago, Swift gathered a lot of feedback, both positive and negative, and quickly established itself as a popular new iOS app programming language, as well as a great tool to write software for various Apple products. There are a lot of reviews on the Internet comparing Swift vs Objective-C and trying to determine the pros and cons of each language.

Written by:
Vladimir Vashurkin,
Software Developer

At Apriorit we have extensive experience of developing software for both iOS and Mac OS, and this article compares two languages together and covers Objective-C vs Swift differences in order to help you choose Mac OS X and iOS programming language for your project.

What is Objective-C

Originally created in the early 80s, Objective-C first gained its popularity as the main language for NEXTSTEP operating system. When NEXTSTEP creator NeXT was merged with Apple in 1996, NEXSTEP became the basis of a new Apple OS, solidifying Objective-C as the main language for Apple systems for years to come.

For a long time Objective-C was a sole primary programming language used for creating OSX and iOS applications. At its core Objective-C is a superset of regular C with added object-oriented features and dynamic runtime.

Objective-C++ is a variation of Objective-C that adds support for C++ syntax, allowing to compile source files containing both Objective-C and C++.

What is Swift

A new Swift programming language from Apple can be best described as Objective-C without the C. It was first introduced by Apple at WWDC 2014. It is a Mac OS and iOS coding language that also supports tvOS and watchOS.

Swift combines strong suits of both C and Objective-C, without having direct built-in C compatibility and all the constrains that go with it. Modern feature set and safe programming patterns are core advantages of Swift over Objective-C, allowing it to provide flexibility and allow for a quick and easy development. With the support of popular mature frameworks, such as Cocoa and Cocoa Touch, Swift completely revamps our understanding of how to make software for Apple products.

Apple themselves consider Swift to be an interactive and expressive language, that is very intuitive and fun to work with. Swift code is inherently safe, yet allows to produce a very fast software.

A little bit of statistics

Apple does not provide public statistics, and there is no a single comprehensive Objective-C vs Swift comparison regarding their popularity and usage online. However, based on various information resources (such as GitHub, StackOverflow), it can be concluded that the popularity of Swift continues to grow.

PYPL index

According to data provided by PYPL (http://pypl.github.io/PYPL.html), Swift caught up in popularity to Objective-C in just a year.

Diagram below shows the popularity of famous languages according to PYPL index (2004 — 2020).


Alternative statistics – TIOBE index

Netherland-based company TIOBE (stands for “The Importance Of Being Earnest”) created an index of popularity of various programming languages called TIOBE programming index. Index is calculated based on the number of search requests related to different languages in the six popular search engines – Google, Google Blogs, Yahoo!, MSN, Wikipedia, Baidu and YouTube.

Below are graphs showing the popularity of Swift and Objective-C over time, based on TIOBE data.

This data distinctively proves the growing popularity of Swift, which finds itself increasingly replacing Objective-C in current software projects. However, Objective-C itself also remains very popular and still widely used today.

Which should I as a developer choose?

Objective-C and Swift advantages and disadvantages should all be considered before making a final choice. However, ultimately, both languages are different and shine in different circumstances, therefore, it is important to choose a language on the per-project basis.

Documentation & language support

Since Objective-C existed for many years with current version 2.0 launched in 2006 and available for 10 years as of now, there are a huge number of resources, including books, tutorials and sample code available out there covering the language and implementations of various features.

Thanks to constant support from Apple over the years, Objective-C currently is both very stable and very reliable. When Swift was introduced in 2014, AppStore had more than 1.2 million apps – all of them written in Objective-C.

An incredibly large amount of third-party libraries is written in Objective-C, focusing both on UI and program logic (databases, networking, multithreading, data analysis, etc.).

Swift, on the other hand, doesn’t have as much third party libraries, however, this is only a matter of time, as it is young and evolving language.

Apple themselves strongly promote Swift. Example of applications, entirely written in Swift includes Slideshare by LinkedIn and WWDC by Apple.

At the moment, Swift 3 comes along with Xcode 8, fixing many of the defects and problems of the language and including plenty of improvements.

Language Runtime

Runtime in Swift is severely behind when compared to Objective-C, and there is a good chance that it won’t be able to catch up in this regard for years to come. As it stands now, Objective-C is the choice when it comes to creating code that benefits from reflection and deep introspection of types and objects. Such a code is most often used for complex SDK, but can also be occasionally found in apps. However, if robustness of runtime is not your main concern, you will be able to easily achieve your goals with Swift.

Code Stability

Swift is way ahead of the Objective-C when it comes to stability of the code itself. This is thanks to its strong typing system and the way error handling works. By simply avoiding ! operators and following idiomatic Swift, you can easily write a code that will account for all potential errors. There are, of course, some exceptions. One great example of an error that can plague both Swift and Objective-C code is a memory leak from a retain cycle. Main cause of this error is the fact that the way Swift automatically references counting system is left unchanged from Objective-C.

Цукерберг рекомендует:  Реализуем эффект анимации границ с помощью SVG и CSS

Working with Foundation APIs

Objective-C is a best choice of language is you need to create application that utilizes some foundation APIs. Examples of such APIs include CoreFoundation, CoreAnimation and AVFoundation. While Swift do provide some ways to work with them, such as wrappers that help to smooth out memory management, the fact that the APIs themselves are based on C makes them much better fit for use with Objective-C.

Using C++ Code

Objective-C also much better at working with C++ libraries or cross-patform C++ SDKs, as each time you want to employ another part of C++ library with Swift, you need to bring in additional overhead. C++ simply cannot be imported into Swift files as is, thus requiring you to commit to creating Objective-C++ and Objective-C wrappers. A process that is both tedious and can result in a number of hard-to-fix bugs.

Supported operating system

Swift supports all new versions of MacOS, and iOS, as well as any iteration of tvOS and watchOS. However, if you need to create a project for older systems, (below 10.9 for MacOS and below 7 for iOS), then you are forced to use Objective-C, as Swift doesn’t support them.

Future-proofing

Swift projects are arguably much more future-proof than the ones written in Objective-C. Swift usage has greatly expanded since its introduction, and it currently used in a third of all Cocoa open source projects. If the pace stays the same, the number of such projects will equal the number of Objective-C ones. Moreover, many new publications about developing for Apple products, such as blogs and online tutorials are already extensively covering Swift. And in the coming years the number of available information will only continue to grow, to the point where there will be no need to understand Objective-C at all. However, it worth noting that despite the rise of Swift Objective-C is still popular and widely used, thus there is no need to convert your code to Swift right away.

Which projects should be written on Objective-C or Swift ?

Next, we will cover the main points to consider when choosing between Objective-C and Swift. While each of the individual points on this list is very important, in is also worth noting that you should make a choice only by carefully considering a situation as a whole, and not based on any single criteria. Choosing the best language for a project depends on both the specifics of the project and qualification of the team, as well as subjective preferences for a particular language or a set of features.

Knowledge and experience

Knowledge of a particular language and experience of using it are probably the first thing many people considering when choosing a language for a project. If your experience in both Objective-C and Swift is equal, then your choice will depend on other factors mentioned below. However, if you have more experience in one particular language, than it is paramount for you to write production applications in this language. If there are no project requirements that dictate otherwise and no objections from your team, you should always create production apps using tools that you familiar with. This prevents accumulation of technical debt, i.e. unfixed bugs or unimplemented features that will otherwise plague the project as you learn as you go.

However, if you need to create a prototype, using a language that you are least familiar with can be a great choice, as it will allow you to learn new thing while simultaneously keeping all the troubles away from production. Using unfamiliar language is also worth it because it gives you a new perspective on things that you have already done, and it may give you a few good ideas on how to improve things when returning to your core production code.

Scheduling constrains

As mentioned above, using an unfamiliar language will often lead to technical debt that can easily put you out of schedule. If you absolutely need to deliver on time, it is paramount for you to use a language where you have a lot of experience and can precisely estimate how much a particular task will take. If your don’t have much experience working with either Swift or Objective-C, then it is better for you to choose Swift, as it allows for faster development.

Scale of the project

Scale of the project is a very important factor in this case due to immaturity of the Swift language. As language updates with each new version, code needs to be converted, and major changes can introduce a rather large overhead into development process. Thus, it is better to restrict the usage of Swift to smaller projects until it matures a bit more, and use much more stable Objective-C for larger ones.

Supported operating systems

As already mentioned above, if your app need to support older versions of iOS and Mac OS, then you have no choice but to use Objective-C.

Summary

Objective-C is best used in:

  • applications that require low-level programming
  • applications that support OS older that OS X 10.9 / iOS 7
  • applications that require or can potentially require a use of C++ libraries or code embedding
  • libraries that can be used in cross-platform applications
  • large project. Objective-C is old and stable, no major changes in newer versions.
  • easy to learn after C / C++

Pros:

  • much more 3rd-party libs and frameworks are available
  • lots of documentation and question answers on the net, gathered over 10+ years
  • stability and time-proven reliability
  • easy integration with C++
  • can be using in Qt


Cons:

  • strange syntax
  • language with dynamic runtime will always be slower than language with static runtime

Swift is best used in:

  • applications targeting OS X 10.9 / iOS 7 and newer
  • if don’t have experience in both Objective-C and Swift

Pros:

  • modern code syntax (like C#, Java, Go, Rust)
  • Active support and promotion by Apple
  • Swift is open source
  • Static runtime: faster performance
  • Swift is going to see bigger use in the future on Windows and Linux
  • Thanks to modern syntax, learning Swift is easier than Objective-C for C# / Java / Go developers

Cons:

  • support only iOS 7+ / OS X 10.9+ apps
  • young language: bugs and lack of >

Разработка iOS приложений: Swift или Objective-C?

29 Сентября, 2020

Большое количество проектов разрабатывается на платформе iOS. Как вы наверняка знаете, операционные системы iOS и Android — два самых популярных игрока на мировом рынке. На данный момент доля iOS составляет 27%, а его собрата — 66,82% (статистика за август 2020).

Сравнивая эти результаты с данными февральского исследования Gartner (iOS — 17,7%, Android — 80,7%) видно значительное увеличение числа устройств с iOS платформой. И в то же время iOS приложения приносят самый большой доход.

Для компаний по разработке ПО это значит значительный рост спроса на разработчиков iOS приложений, способных писать качественный код. И тут мы подходим к вопросу языков программирования. Что же лучше для разработки мобильных iOS приложений, Swift или Objective-C?

Немного об Objective-C

Язык программирования Objective-C появился в начале 1980-х гг. и был главным языком, используемым на платформе NeXT для своей операционной системы NeXTSTEP. В 1996 году Apple Computer приобрела NeXT и начала использовать OpenStep в MAC OS X, который включал Objective-C и инструмент на основе NeXT Objective-C.

В феврале 2008 Apple выпустил iPhone SDK 2.0, позволяющий создавать нативные приложения для iOS.

И это стало очередной революцией в разработке мобильных приложений и рождением нового поколения разработчиков — на iOS. Для многих программистов это было настоящим вызовом, брошенным компанией Apple, так как большинство из них ранее не имело дела с Objective-C.

Но, несмотря на это, решение было весьма успешным. Благодаря выделению (назовем это так) языка программирования Objective-C компании Apple удалось “наводнить” App Store десятками тысяч новых приложений.

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

Несколько слов о Swift

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

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

В прошлом году Swift занял первое место в Stack Overflow в категории Most Loved Programming Language, а в этом — второе.

Сейчас многие разработчики iOS приложений предпочитают писать код на Swift из-за его важных преимуществ. Конечно, это ни в коем случае не значит, что стоит забыть об Objective-C и полностью перейти к “свифту”. Но это не меняет того факта, что код, написанный на Swift, быстрее, его проще читать, и сам язык более современный.

В этой статье мы рассмотрим эти языки программирования для разработки приложений для платформы iOS.

Скорость и Безопасность

Когда в 2014 году Apple выпустила Swift, одним из заявленных преимуществ была его скорость. Как бы то ни было, он не имеет такой высокой производительностью, как другие языки. Компилятор Swift довольно медленный и из-за этого могут возникать ошибки, например, при реализации “дженериков” (generics).

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

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

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

Удобство разработки мобильных iOS приложений

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

Например, система типов Swift снижает сложность промежуточного кода, в то время как разработчики iOS приложений, пишущие на Objective-C, вынуждены запоминать специальные символы (%s, %d, %@) и предоставлять списки переменных для замены каждого из них. Также Swift включает модули, которые устраняют класс префиксов и имеет более понятный закрытый синтакс.

Одно из главных преимуществ “свифта” заключается в возможности создавать гибкие и легковесные классы, что упрощает разработчикам задачу: если вы хотите ввести описание, просто используйте протокол Printable. И то же самое со сравнением (применение протокола Comparable).

Необходимо заметить, что Swift гораздо более современный язык, адаптирующий современные подходы других языков. Например, функция добавления двух строк вместе при помощи “+”. Так, Objective-C не имеет такой возможности. Говоря о функциях “свифта”, следует отметить одну из самых полезных, а именно опцию Playground.

Благодаря ей разработчики iOS приложений легко могут увидеть, как работает приложение (как должно или же нет). Также им не нужно запускать эмулятор, что позволяет сэкономить время.

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

Несмотря на то, что Swift имеет слабые стороны, (недостаточная поддержка сторонних IDE и наличие багов в XCode, например, XCode 6.3 не распознает юнит-тесты Swift), он предлагает много преимуществ.

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

Будучи современным языком программирования, Swift включает много функций и возможностей, в какой-то мере заимствуя полезные вещи из других языков (в частности, Objective-C) и игнорируя ненужные. Подведем итоги.


Почему мы предпочитаем Swift для разработки iOS приложений

  1. В какой-то мере Swift представляет собой усовершенствованную версию Objective-C, заимствующую какие-то современные функции и подходы из него и других языков.
  2. Swift более простой для чтения.
  3. Swift требует меньше кода.
  4. Фиксирование багов занимает меньше времени.
  5. Он обеспечивает безопасное управление памятью, опцию Playground и многое другое.
  6. Swift быстрее по сравнению с Objective-C.
  7. Язык постоянно совершенствуется.

Со своего первого релиза в 2014 году Swift сделал значительный шаг вперед. В результате жизнь iOS разработчиков “стала проще”, появились новые функции, предотвращающие какие-то общие ошибки и благодаря которым фиксирование багов стало занимать меньше времени.

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

Также, в связи с «наплывом» новых проектов, мы расширяем нашу команду мобильной разработки, и спешим сообщить, что в нашей компании открылась вакансия iOS разработчика!

Мы будем рады предоставить вам конкурентный уровень вознаграждения и профессиональный рост. Ждем ваше резюме.) (Добавлено 18 июня 2020)

В чем преимущества 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.

Разработка под 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.

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: #1d429040-076e-11ea-a4c9-352cd5491013

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