Как стать автором
Поиск
Написать публикацию
Обновить
11.79

Swift *

Открытый объектно-ориентированный язык

Сначала показывать
Порог рейтинга
Уровень сложности

Clean swift архитектура как альтернатива VIPER

Время на прочтение7 мин
Количество просмотров42K

Введение


На данный момент существует множество статей про VIPER — clean архитектуру, различные вариации которой в свое время стали популярны для iOS проектов. Если вы не знакомы с Viper, можете прочитать тут, тут или тут.

Я бы хотел поговорить об альтернативе VIPER — Clean Swift. Сlean Swift на первый взгляд похож на VIPER, однако отличия становятся видны после изучения принципа взаимодействия модулей. В VIPER основу взаимодействия составляет Presenter, он передает запросы пользователя Interactor’у для обработки и форматирует полученные от него назад данные для отображения на View Controller:

image
Читать дальше →

Новичок или опытный? Как нанять мобильного разработчика под iOS, который что-то действительно умеет

Время на прочтение8 мин
Количество просмотров17K
Мобильная разработка — это особая кухня, и в ней есть свои нюансы. Именно поэтому собеседования с кандидатами в отдел разработки под iOS должны проходить с определенным уклоном. Сегодня мы расскажем, как проходит прием в штат мобильных разработчиков Acronis, и какие курьезы бывают на собеседованиях, когда соискатель считает, что достаточно запомнить несколько умных слов, а потом «разберемся на месте».

image
Читать дальше →

Взаимодействие с сервером через API в iOS на Swift 3. Часть 2

Время на прочтение9 мин
Количество просмотров7.5K
Эта статья является продолжение статьи Взаимодействие с сервером через API в iOS на Swift 3. Часть 1 и обновлением старой статьи, написанной на Objective-C, на swift 3.

Краткая теория


GET запрос


GET – это простейший метод HTTP запроса, и именно его использует браузер для загрузки веб-страниц. Он используется для запроса содержимого, расположенного по определенному URL. Содержимое может быть, например, веб-страницей, рисунком или аудио-файлом. По соглашению, GET запросы осуществляют только чтение и в соответствии с W3C стандартом не должны быть использованы в операциях, изменяющий серверную сторону. Например, мы не будем использовать GET запрос для отсылания формы или пересылки фотографии, потому что эти операции требуют некоторых изменений на серверной стороне (мы будем использовать в этих случаях POST).

POST запрос


POST посылает данные для дальнейшей обработки на URL. Параметры включены в тело запроса, использующего тот же формат, что и GET. Например, если мы хотим запостить форму, содержающую два поля, имя и возраст, то мы пошлем что-то похожее на name=Martin&age=29 в теле запроса. 

Такой способ пересылки параметров широко используется в веб-страницах. Наиболее популярные случаи – это формы. Когда мы заполняем форму на сайте и кликаем Submit, вероятнее всего запрос будет POST.
Читать дальше →

Производительность в iOS — Core Animation, Offscreen Rendering и System Trace. Часть 2

Время на прочтение7 мин
Количество просмотров13K



Как избежать проблем с производительностью с помощью пресета Core Animation, что использовать для трассировки участков кода и с помощью каких функций сократить долю вычислительных операций в приложении с 26% до 0.6% — читай во второй части статьи по материалам доклада Люка Пархэма на прошлогодней конференции MBLT DEV. Первая часть статьи доступна здесь.


Под катом не только полезные советы, но и последние early bird билеты на MBLT DEV 2018 — купить их можно только сегодня.

Производительность в iOS или как разгрузить main thread. Часть 1

Время на прочтение8 мин
Количество просмотров13K



Есть разные приёмы и хитрости, которые помогают оптимизировать работу iOS-приложений, когда одна задача должна выполняться за 16,67 миллисекунд. Рассказываем, как разгрузить main thread и какие инструменты лучше подходят для отслеживания стека вызовов в нём.


«Ребята, давайте представим, что вы сможете сократить время запуска на 10 секунд. Умножив это на 5 миллионов пользователей, ежедневно у нас будет 50 миллионов секунд. За год это составит порядка десяти человеческих жизней. Поэтому, если вы сделаете первичную загрузку на 10 секунд быстрее, вы спасёте несколько десятков жизней. Это действительно стоит того, не правда ли?»

Стив Джобс о производительности (времени запуска компьютера Apple II).


Статья основана на докладе iOS-разрабочика из Fyusion Люка Пархема, с которым он выступил на Международной конференции мобильных разработчиков MBLT DEV в прошлом году.

Читать дальше →

Swift 4.1: почему Apple переименовала flatMap в compactMap

Время на прочтение3 мин
Количество просмотров19K
Привет, Хабр!

Меня зовут Александр Зимин, я iOS-разработчик в Badoo. Это перевод статьи моего коллеги Швиба, в которой он рассказал, что из себя представляла функция flatMap в Swift и почему одну из её перегрузок переименовали в compactMap. Статья полезна как для понимания процессов, происходящих в репозитории Swift и его эволюции, так и для общего развития.



В функциональном программировании есть чёткое определение того, что должна представлять собой функция flatMap. Метод flatMap берёт список и преобразующую функцию (которая для каждого преобразования ожидает получить ноль или больше значений), применяет её к каждому элементу списка и создаёт единый (flattened) список. Такое поведение отличается от простой функции map, которая применяет преобразование к каждому значению и для каждого преобразования ожидает получить только одно значение.
Читать дальше →

Парсинг и работа с Codable в Swift 4

Время на прочтение11 мин
Количество просмотров86K


Формат JSON приобрел большую популярность, именно он обычно используется для передачи данных и выполнения запросов в клиент-серверных приложениях. Для парсинга JSON требуются инструменты кодирования/декодирования данного формата, и компания Apple не так давно провела их обновление. В данной статье мы рассмотрим методы парсинга JSON с применением протокола Decodable, сравним новый протокол Codable с предшественником NSCoding, оценим преимущества и недостатки, разберем все на конкретных примерах, а также рассмотрим некоторые особенности, встречающиеся при реализации протоколов.
Читать дальше →

Взаимодействие с сервером через API в iOS на Swift 3. Часть 1

Время на прочтение9 мин
Количество просмотров25K
Данная статья является обновлением статьи Получение удаленных данных в iOS, написанной в ноябре 2015 с использованием Objective-C и потому морально устарешней. Сейчас же будет приведен код, переписанный на Swift 3 и iOS 10 (последней версией является Swift 4.1 и iOS 11, но мой компьютер их уже не поддерживает).

Краткая теория


Формат url


http://www.google.com/?q=Hello&safe=off

  • http — протокол, который определяет, по какому стандарту делается запрос. Еще варианты: https, ftp, file
  • www.google.com — имя домена
  • / — директория, где находятся необходимые нам ресурсы.
  • После вопросительного знака (?) идут параметры q=Hello&safe=off. Они состоят из пар ключ-значение.
  • При запросе также указывается метод, который говорит, как сервер должен обрабатывать этот запрос. По умолчанию, это метод GET.

Данный url из примера можно прочитать таким образом: http запрос с методом GET отправляется домену google.com, в корневую директорию /, с двумя параметрами q со значением Hello и safe со значением off.
Читать дальше →

Однотипные методы? Хватит это писать

Время на прочтение4 мин
Количество просмотров6.6K

Вы когда-нибудь писали адаптеры для Keychain или NSUserDefaults? Они полностью состоят из однотипных сеттеров и геттеров. Предлагаю написать логику один раз, предоставив остальное рантайму. За реализацией прошу под кат.


клавиатура с кнопками copy и paste

Читать дальше →

Protocol-Oriented Programming

Время на прочтение17 мин
Количество просмотров35K
На WWDC 2015 Apple объявила, что Swift — первый протокол-ориентированный язык программирования (видео сессии «Protocol-Oriented Programming in Swift»).

На этой сессии и ряде других (Swift in Practice, Protocol and Value Oriented Programming in UIKit Apps) Apple демонстрирует хорошие примеры использования протоколов, однако не даёт формального определения, что же такое Protocol-Oriented Programming.

В интернете множество статей о Protocol-Oriented Programming (POP), которые демонстрируют примеры использования протоколов, но и в них я не нашёл ясного определения POP.

Я попытался проанализировать примеры использования протоколов и сформировать принципы, которых стоит придерживаться, чтобы код можно было назвать протокол-ориентированным.
Читать дальше →

Codable: Советы и Примеры

Время на прочтение6 мин
Количество просмотров14K
Хотел бы поделиться с вами некоторыми советами и трюками, которые я использовал на этом примере.

Скачайте Swift Playground со всем кодом из этой статьи:

image

Codable представлен в Swift 4 с целью заменить старый NSCoding API. В отличие от NSCoding у Codable есть поддержка JSON первого класса, что делает его перспективным вариантом для использования API JSON.

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

Разбор архитектуры VIPER на примере небольшого iOS приложения на Swift 4

Время на прочтение18 мин
Количество просмотров97K
«У каждого свой VIPER». Автор неизвестен
В данной статье я хотел бы рассмотреть архитектуру VIPER на небольшом конкретном примере, который в того же время показывал всю мощь этой архитектуры и был написан на последнем Swift 4. Для тех, кто хочет сразу глянуть код, не читая всю статью, ссылка на реп в самом низу.


Читать дальше →

Swift для дата-сайентиста: быстрое погружение за 2 часа

Время на прочтение9 мин
Количество просмотров13K


Google объявил, что TensorFlow переезжает на Swift. Так что отложите все свои дела, выбросьте Python и срочно учите Swift. А язык, надо сказать, местами довольно странный.


Ближайшие события

Книга «Swift. Основы разработки приложений под iOS и macOS. 4-е изд. дополненное и переработанное»

Время на прочтение5 мин
Количество просмотров14K
image Данная книга содержит исчерпывающую информацию для всех желающих научиться программировать на замечательном языке Swift с целью создания собственных iOS-приложений (в том числе и для macOS, tvOS и watchOS) или программ для операционной системы Linux. В ходе чтения книги вы встретите не только теоретические сведения, но и большое количество практических примеров и заданий, выполняя которые вы углубите свои знания изучаемого материала.

В ходе долгого и плодотворного общения со многими из вас была выработана масса идей, благодаря которым новое издание стало по-настоящему полезным. В сравнении с предыдущим изданием данная книга содержит следующие изменения и дополнения:

— Весь материал актуализирован в соответствии со Swift версии 4.1 и Xcode 9.
— Добавлено большое количество нового учебного материала, в частности, связанного с практической разработкой приложений под iOS.
— Доработана глава, посвященная типу данных String.
— Учтены пожелания и замечания пользователей по оформлению и содержанию.
— Исправлены найденные опечатки. Выделен материал, предназначенный для начинающих программистов, в отдельные блоки, чтобы позволить читателям с опытом разработки на других языках не отвлекаться на ненужный им материал.
Читать дальше →

Использование паттерна MVC при проектировании TableView

Время на прочтение12 мин
Количество просмотров10K
Привет, Хабр! Представляю вашему вниманию перевод статьи «iOS Tableview with MVC», опубликованной в октябре 2016 года на Medium.com разработчиком Stan Ostrovskiy.


Пример использования UITableView в приложении

В данной статье на конкретном примере вы сможете ознакомиться с применением популярного паттерна MVC, при проектировании одного из самых популярных элементов интерфейса UITableView. Также данная статья в довольно понятном и доступном виде дает возможность понять базовые архитектурные принципы при проектировании вашего приложения, а также дает возможность ознакомиться с элементом UITableView. Учитывая тот факт, что немалое количество разработчиков часто пренебрегают какими-либо архитектурными решениями при создании своих приложений, считаю что данная статья будет очень полезна как для начинающих разработчиков, так и для программистов с определенным опытом. Паттерн MVC продвигается самой компанией Apple и является самым популярным шаблоном, используемым при разработке под iOS. Это не значит, что он подходит для любых задач и всегда является оптимальным выбором, но, во-первых, с помощью MVC проще всего получить общее понимание построения архитектуры вашего приложения, и, во-вторых, довольно часто MVC действительно хорошо подходит для решения определенных задач проекта. Данная статья поможет вам структурировать ваш код, сделать его удобным, переиспользуемым, читаемым и компактным.
Читать дальше →

Что нового в AppCode 2018.1

Время на прочтение4 мин
Количество просмотров5.2K

Привет!


Этот пост, конечно же, про AppCode 2018.1. Впрочем нет, в этот раз он еще и про первый апдейт. У нас много нового и полезного, все в картинках под катом.


Splash


Читать дальше →

Реактивное программирование в Objective-C

Время на прочтение11 мин
Количество просмотров6.6K
Со временем языки программирования постоянно изменяются и развиваются из-за появления новых технологий, современных требований или простого желания освежить стиль написания кода. Реактивное программирование можно реализовать с помощью различных фреймворков, таких как Reactive Cocoa. Он изменяет рамки императивного стиля языка Objective-C и у такого подхода к программированию есть что предложить стандартной парадигме. Это, безусловно, и привлекает внимание iOS разработчиков.

ReactiveCocoa привносит декларативный стиль в Objective-C. Что мы подразумеваем под этим? Традиционный императивный стиль, который используют такие языки как: C, С++, Objective-C, и Java и т. д. можно описать так: Вы пишете директивы для компьютерной программы, которые должны быть выполнены определенным способом. Другими словами, вы говорите «как сделать» что-то. В то время как декларативное программирование позволяет описать поток управления как последовательность действий, «что сделать», не определяя, «как делать».

ReactiveCocoa
Читать дальше →

Улучшение производительности посредством контроля доступа

Время на прочтение6 мин
Количество просмотров10K
Несколько лет назад команда Apple опубликовала интересную статью Повышение производительности за счет сокращения динамической отправки. Эта статья довольно интересна для прочтения, в которой выделяются тонкие аспекты языка Swift и его компилятора.

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

Улучшение производительности посредством контроля доступа
Читать дальше →

Митап CocoaHeads в офисе Туту.ру

Время на прочтение1 мин
Количество просмотров1.1K
image

Мы вновь ждем у себя гостей митапа CocoaHeads! Встречаемся уже в эту пятницу, 13 апреля. Традиционно будет пицца, круглый стол, викторина и, конечно же, интересные доклады. Зарегистрироваться на мероприятие можно через приложение CocoHeads для iOS.
Читать дальше →

Готовим iOS клиента для GraphQL

Время на прочтение8 мин
Количество просмотров14K
image

Я уверен, что каждый из нас хоть когда-то испытывал проблемы с REST API. Вечные баталии с бэком за нужный формат API, несколько запросов на экран и прочее. Согласитесь, что это не редкость, а ежедневная рутина. А еще недавно Tribuna Digital запустила новый проект — Betting Insider. Изначально проект был реализован на iOS и Android, а позже началась разработка веб версии. Имеющееся API оказалось очень неудобным для веба. Это все привело к тому, что мы решили устроить эксперимент и попробовать GraphQL вместе с клиентом от Apollo. Если хотите познакомится с данной технологией в iOS поближе, то добро пожаловать под кат!
Читать дальше →