Swift X Objective-C: Кросс-языковое мышление 2

S

Статья основана на Xcode 7.3 и соответствующих ему языковых версиях

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

Swift X Objective-C: Interface Declaration

Сейчас вашему взору предстанет достаточно интересная  особенность Swift, которую можно смело называть эталонной, если вопрос касается сравнения объема кода. Дело в том, что в Swift нет обязательного объявления интерфейса. Многие из вас, возможно, впервые услышали об интерфейсе. Да, мои юные друзья, было дело в Objective-C. В Swift даже случайно можно нарваться на него, но чаще всего это скрыто от наших глаз. В Objective-C все классы делятся на .h и .m файлы. Так вот — интерфейс это .h файл. В нем мы объявляем все свойства и методы для нашего класса. Реализуем же их в .m файле. Давайте посмотрим, как это выглядит:

.h — файл интерфейса:

.m — файл реализации:

создание объекта от нашего класса:

В Swift это все перекочевало в единый .swift файл:

Да, именно! Этот кусочек кода — аналог того кода, что выше. А создание объекта этого класса выглядит так:

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

objective

Swift X Objective-C: Syntax Declaration

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

Теперь, давайте создадим новый экземпляр MyClass:

и попытаемся переназначить значение «a», которое мы объявили константой:

с «b» проблем не возникнет, так как мы объявили его переменной:

Если говорить категорически просто — var и let — необходимый минимум для счастья.

Давайте теперь посмотрим, как это работает в Objective-C. Неизменяемые значения наверняка работают не так. Если объявить некую константу, она обязательно должна быть статичной и инициализироваться немедленно. Для того, что бы сделать нечто, похожее по функционалу на код выше, вам необходимо будет создать «сеттер» для переменной, а константу защитить от переназначения. Руками.

Посмотрим пример:

.h:

.m:

Создаем объект от класса:

Это показывает, что мы можем сделать что либо константой для внешнего обращения, но сам класс вполне способен менять свои значения внутри себя. Хотя лучше так не делать. В Objective-C константы должны оставаться статичными:

На этом мы, пожалуй, закончим. Как вы уже могли обратить внимание — Swift действительно превосходит Objective-C по простоте и легкости. И чем дальше мы будем заходить, тем больше отличий вы заметите. Однако, обращайте внимания и на сходства! Это очень важный опыт, который сильно упростит вам работу с документацией. Когда вы увидите эту тонкую нить сходства — вы сможете использовать документацию/уроки для Objective-C и программировать при этом на Swift. И наоборот.

Поддержите ресурс blog.justDev:

Сведения об авторе

Игорь Малеваный

4 комментария

  • Все «прелести» Swift заканчиваются тогда, когда пытаешься кодить через нормальную IDE (AppCode)…
    Я уже молчу, про то, что если вместо ! поставить ?, то компилятор виснет на процессе компилинга, навсегда, сжирая весь ЦПУ.

    Имхо, swift сыроват…

  • «Я уже молчу, про то, что если вместо ! поставить ?, то компилятор виснет на процессе компилинга» — это свидетельствует о сырости Xcode, не языка =) И у меня таких проблем на данный момент не замечено

  • //Мы должны переопределить сеттер, что бы защитить константу от переназначения.
    А как же readolny?

    @synthesize a;
    @synthesize b;
    А зачем это писать если это делается автоматически?

    • Тут показан более длинный демонстрационный путь. Наглядность повысится

Instagram

Поддержите ресурс blog.justDev:

Свежие записи

Рубрики