Все потоки
Поиск
Написать публикацию
Обновить
23.52

Swift *

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

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

Общее представление об архитектуре Clean Swift

Время на прочтение6 мин
Количество просмотров42K
Привет, читатель!

В этой статье я расскажу об архитектуре iOS приложений — Clean Swift. Мы рассмотрим основные теоретические моменты и разберем пример на практике.


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

Руководство по Apple Subscriptions Notifications для iOS. Так ли они хороши на самом деле?

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


Итак, у вас есть приложение с автоматическими возобновляемыми подписками. Оно прекрасно работает, пользователи безудержно оформляют премиум подписки и пишут хвалебные отзывы. Красота!


Всем привет, меня зовут Денис, я руководитель проекта Apphud – сервиса аналитики авто-возобновляемых подписок для приложений на iOS.


Вам, как руководителю проекта, жизненно необходимо быть в курсе ключевых метрик продукта. Одной из самых важных является Life time value (LTV) – средний доход с каждого пользователя за все время пользования приложением. Но как его вычислить в случае с авто-возобновляемыми подписками на iOS? Как отследить момент продления, отмены, возобновления подписки пользователем?

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

Бесконечный UIScrollView

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

Во многих приложениях вы можете столкнуться с прокруткой, которая никогда не переносится в противоположном направлении в конце контента. Эта техника стандартна уже в течение многих лет, на многих платформах. С другой стороны, есть много сторонних библиотек, чтобы получить этот эффект. НО вам не нужно никакой сторонней библиотеки. У этой техники очень простая логика.
Читать дальше →

Поднимаем читаемость кода в iOS разработке

Время на прочтение3 мин
Количество просмотров13K
Представьте себе книгу, в которой нет деления на главы, а все идет без логической и смысловой разбивки, книгу, где нет абзацев, нет точек и запятых, книгу, где в первой строке рассказывается про одно, во второй про другое, в третьей опять про первое.

Представили?

Смогли бы вы понять, о чем книга?

Насколько быстро вы смогли бы найти интересующий вас отрывок?

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

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

Для удобства я буду использовать слово класс (class), но подразумевать любой вид типа (class, struct, enum).

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

UIAppearance оказался не так прост

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

Протокол UIAppearance появился в iOS 5 в 2011 году, в те далёкие времена, когда у Instagram не было приложения под Android, а сериальному Неду Старку ещё не отрубили голову.


Насчёт Эддарда

Мейстеры мне прислали ворона с новостью, что на момент выхода iOS 5 — уже отрубили. Но чтобы не спойлерить красную свадьбу или что-то ещё, пожалуй, оставлю всё как есть.


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

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

Интервью — 10 вопросов про Swift. Часть 2

Время на прочтение5 мин
Количество просмотров15K
До запуска курса «iOS-разработчик» остается все меньше времени, поэтому сегодня мы продолжаем публиковать материал из серии «10 вопросов про Swift». Первую часть которого можно прочитать тут.



Объясните дженерики в Swift?


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

Типы Array и Dictionary в Swift являются универсальными коллекциями (дженериками).
В приведенном ниже коде универсальная функция для свапа двух значений используется для строки и целого числа. Это пример кода многократного использования.
Читать дальше →

Интервью — 10 вопросов про Swift. Часть 1

Время на прочтение4 мин
Количество просмотров13K
Салют, хабровчане! Майские закончились, и мы продолжаем запускать новые курсы. Эта статья приурочена к старту курса «iOS-разработчик». Обучение начнется 28 мая, а до тех пор у вас есть возможность побольше узнать о языке Swift и его особенностях. Это первая статья из трех, где в формате интервью рассматриваются достоинства и особенности языка Swift, на котором мы учим создавать приложения под iOS на наших курсах.



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

Swift: ARC и управление памятью

Время на прочтение13 мин
Количество просмотров57K
Будучи современным языком высокого уровня, Swift в основном берёт на себя управление памятью в ваших приложениях, занимаясь выделением и освобождением памяти. Это происходит благодаря механизму, который называется Automatic Reference Counting, или сокращенно ARC. В этом руководстве вы разберётесь, как работает ARC и как правильно управлять памятью в Swift. Понимая этот механизм, вы сможете влиять на время жизни объектов, размещенных в куче (heap).

В этом руководстве вы прокачаете свои знания Swift и ARC, изучив следующее:

  • как работает ARC
  • что такое циклы ссылок (reference cycles) и как их правильно устранять
  • как создать пример цикла ссылок
  • как находить циклы ссылок при помощи визуальных средств, предлагаемых Xcode
  • как обращаться с ссылочными типами и типами-значениями
Читать дальше →

Swift under the hood: Generic implementation

Время на прочтение6 мин
Количество просмотров9.7K
Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can write code that avoids duplication and expresses its intent in a clear, abstracted manner. — Swift docs

Каждый, кто писал на Swift использовал дженерики. Array, Dictionary, Set — самые базовые варианты использования дженериков из стандартной библиотеке. Как они представлены внутри? Расмотрим, как данная основополагающая возможность языка реализована инженерами Apple.

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

Изменяем содержимое уведомления приложения iOS

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

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

Я надеюсь эта статья будет полезна для новичков в программировании под iOS на Swift. Предполагается, что у вас есть хотя бы некоторый опыт программирования под iOS на Swift. Я использовал Swift 5 и Xcode 10.2.1. И так, приступим.

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

«Фабричный метод» и «Абстрактная фабрика» во вселенной «Swift» и «iOS»

Время на прочтение9 мин
Количество просмотров18K
Слово «фабрика» – безусловно одно из самых часто употребляемых программистами при обсуждении своих (или чужих) программ. Но смысл в него вкладываемый бывает очень разным: это может быть и класс, порождающий объекты (полиморфно или нет); и метод, создающий экземпляры какого-либо типа (статический или нет); бывает, и даже просто любой порождающий метод (включая, конструкторы).

Конечно, не все, что угодно, порождающее экземпляры чего-либо, может называться словом «фабрика». Более того, под этим словом могут скрываться два разных порождающих шаблона из арсенала «Банды четырех» – «фабричный метод» и «абстрактная фабрика», в подробности которых я и хотел бы немного углубиться, уделяя особое внимание классическим их пониманию и реализации.
Читать дальше →

Swift: решето Эратосфена

Время на прочтение1 мин
Количество просмотров5K
Это будет совсем небольшая публикация, на которую меня вдохновила эта статья. Нет, я не собираюсь соревноваться с предложенным там решением (разве что в краткости), но, может быть, как демонстрация возможностей Swift, она будет интересна хабрасообществу.
Читать дальше →

Внедрение зависимостей с DITranquillity

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

Dependency Injection — довольно популярный паттерн, позволяющий гибко конфигурировать систему и правильно выстраивать зависимости компонентов этой системы друг от друга. Благодаря типизации, Swift позволяет использовать удобные фреймворки с помощью которых можно очень коротко описать граф зависимостей. Сегодня я хочу немного рассказать об одном из таких фреймворков — DITranquillity.

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

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

Таймер в iOS

Время на прочтение9 мин
Количество просмотров37K
Представьте, что вы работаете над приложением, в котором нужно периодически выполнять некоторые действия. Именно для этого в Swift используется класс Timer.

Timer используется для планирования действий в приложении. Это может быть разовое действие или повторяющаяся процедура.

В этом руководстве вы разберётесь, как в iOS работает таймер, как он может влиять на отзывчивость UI, как оптимизировать потребление батареи при использовании таймера и как использовать CADisplayLink для анимации.

В качестве тестового полигона мы будем использовать приложение — примитивный планировщик задач.
Читать дальше →

Универсальный JSONDecoder

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

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

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

Собеседование: Swift. Вопросы и ответы

Время на прочтение13 мин
Количество просмотров61K
Языку программирования Swift всего четыре года, но он уже становится основным языком разработки для iOS. Развиваясь до версии 5.0, Swift превратился в сложный и мощный язык, отвечающий как объектно-ориентированной, так и функциональной парадигме. И с каждым новым релизом в нем добавляется еще больше возможностей.

Но насколько хорошо вы на самом деле знаете Swift? В этой статье вы найдете примеры вопросов для собеседования по Swift.

Вы можете использовать эти вопросы для интервьюирования кандидатов, чтобы проверить их знания или вы можете проверить свои собственные. Если вы не знаете ответа, не переживайте: к каждому вопросу есть ответ.
Читать дальше →

Добавление UICollectionViews в кастомный UITableViewCell который сделан через Xib

Время на прочтение2 мин
Количество просмотров8.3K
Я был удивлен, узнав, сколько было препятствий для реализации UICollectionView в UITableViewCell. Поэтому этот туториал здесь, надеюсь он сэкономит вам много времени.

Примечание: это туториал не для начинающих. Предполагается, что вы знаете о tableViews и создании пользовательских ячеек с файлами xib.

Также я не описываю ничего, про визульную составляющую.
Читать дальше →

Создание карточек как Tinder на Swift

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

Tinder — мы все знаем, что это приложение для знакомств, где вы можете просто отклонить или принять кого-то свайпом вправо или влево. Эта идея считывания карт теперь используется в тоннах приложений. Этот способ отображения данных для вас, если вы устали от использования табличных и коллекционных представлений. Есть множество учебников по этому вопросу, но этот проект занял у меня немало времени.
Читать дальше →

Автоматические размеры хедера и футера UITableView с AutoLayout

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

В этой статье я попытаюсь раскрыть некоторые причуды класса UITableView и покажу вам простой и самый простой способы реализовать представления верхнего и нижнего колонтитулов изменяемой высоты. Для меня простота, это когда дело доходит до написания кодом пользовательского интерфейса, но на самом деле заключается в том, чтобы не кодить никакого UI. В этой статье я буду максимально использовать interface builder :)
Я буду говорить о заголовках, но то же самое относится и к нижним колонтитулам.

image

Настройка TableView


Хедеры в табличном или простом стиле TableView ничем не отличаются от любых других строк UITableView. Настройка на самом деле довольно проста.

  • должны быть установлены sectionHeaderHeight и estimatedHeaderHeight.
  • UITableView.automaticDimension — это то, что позволяет AutoLayout вычислять высоту каждой ячейки во время выполнения.
  • estimatedHeaderHeight должен быть установлен для грубой оценки общей высоты его содержимого для отображения индикатора прокрутки.

Эти свойства могут быть установлены в инспекторе размеров при выборе TableView в вашей раскадровке.
Читать дальше →

Модульная разработка или путь туда, а не обратно

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

Как мы пришли к новому подходу работы с модулями в iOS приложении RaiffeisenBank.

Проблема


В приложениях Райффайзенбанка каждый экран состоит из нескольких, максимально независимых друг от друга модулей. «Модулем» мы называем визуальный компонент, имеющий своё представление. При проектировании приложения очень важно писать логику так, чтобы модули были независимыми и их легко можно было добавлять или убирать, не прибегая к рефакторингу.
Читать дальше →