Как стать автором
Обновить

Запили Sign in with Apple, или 30 апреля (точнее июня) твоё приложение превратится в тыкву

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

Часть 2


Компания Apple опубликовала следующую новость 4 марта 2020 г.: “Все новые приложения и апдейты должны соответствовать новым гайдлайнам ревью и интерфейса к 30 апреля (перенесено на июнь) 2020.”


И главным новшеством этих гайдлайнов является обязательное наличие рабочей кнопки “Sign in with Apple” (SIWA) для приложений, позволяющих логиниться через сторонние сервисы (Facebook, Google, Twitter и т.д.).



Казалось бы, всё просто, но есть нюансы →

Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии11

Sign in with Apple — дедлайн уже 30 июня

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

Как мы уже писали в прошлой статье, к 30 июня 2020 все новые аппстор приложения и апдейты должны поддерживать функцию “Sign in with Apple”.



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

Читать дальше →
Всего голосов 6: ↑5 и ↓1+4
Комментарии4

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

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

Во многих приложениях вы можете столкнуться с прокруткой, которая никогда не переносится в противоположном направлении в конце контента. Эта техника стандартна уже в течение многих лет, на многих платформах. С другой стороны, есть много сторонних библиотек, чтобы получить этот эффект. НО вам не нужно никакой сторонней библиотеки. У этой техники очень простая логика.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии2

Сила дженериков в Swift. Часть 1

Время на прочтение4 мин
Количество просмотров29K
Всем привет! Делимся с вами переводом, подготовленным специально для студентов курса «iOS Разработчик. Продвинутый курс». Приятного прочтения.



Generic-функция, generic-тип и ограничения типа

Что такое дженерики?


Когда они работают – вы их любите, а когда нет – ненавидите!

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

Swift – это типобезопасный язык. Всякий раз, когда мы работаем с типами, нам нужно явно их указывать. Например, нам нужна функция, которая будет работать более чем с одним типом. Swift имеет типы Any и AnyObject, но их стоит использовать осторожно и далеко не всегда. Использование Any и AnyObject сделает ваш код ненадежным, поскольку будет невозможно отследить несоответствие типов при компиляции. Именно тут на помощь приходят дженерики.

Generic код позволяет создавать многократно используемые функции и типы данных, которые могут работать с любым типом, отвечающем определенным ограничениям, обеспечивая при этом типобезопасность во время компиляции. Этот подход позволяет писать код, который помогает избежать дублирования и выражает свой функционал в понятной абстрактной манере. Например, такие типы как Array, Set и Dictionary используют дженерики для хранения элементов.
Читать дальше →
Всего голосов 17: ↑13 и ↓4+9
Комментарии10

Сила дженериков в Swift. Часть 2

Время на прочтение6 мин
Количество просмотров17K
Добрый день, друзья. Специально для студентов курса «iOS Разработчик. Продвинутый курс» мы подготовили перевод второй части статьи «Сила дженериков в Swift».





Связанные типы, условия where, сабскрипты и прочее…

В статье «Сила дженериков в Swift. Часть 1» описывались generic-функции, generic-типы и ограничения типа. Если вы новичок, я бы рекомендовала вам для лучшего понимания сначала прочитать первую часть.

При определении протокола иногда полезно объявить один или несколько связанных типов как часть определения. Связанный тип задает имя-заглушку для типа, который используется в качестве части протокола. Фактический тип, используемый для этого связанного типа не будет указан, пока протокол не будет использован. Связанные типы объявляются с помощью ключевого слова associatedtype.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии0

iOS Responder Chain или Что спрашивают на собеседовании

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

image


Какая разница между первым и вторым примером?

За что отвечает таргет?

В каком случае вызывается метод при нажатие кнопки?

TL;DR


При нажатии на кнопку наш метод вызывается в обоих случаях.


Только в первом примере UIKit попытается вызвать метод в назначенном таргете(у нас это ViewController). Будет краш, если этого метода не существует.


Во втором же примере используется iOS Responder Chain, UIKit будет искать самого ближнего UIResponder-a у которого есть данный метод. Краша не будет, если наш метод не найден.


UIViewController, UIView, UIApplication наследуют от UIResponder.

Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии3

Разбираемся с Opaque Return Types в Swift

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

Opaque return types (непрозрачные типы) — это новая языковая конструкция, представленная Apple в Swift 5.1. Их можно использовать для возврата некоторого (some) значения функции (function)/метода (method) и свойства (property), не раскрывая конкретный тип значения клиенту, который вызывает API. Тип возврата будет некоторым типом, реализующим протокол (protocol). С помощью этого решения API-интерфейс модуля больше не должен публично раскрывать базовый внутренний возвращаемый тип метода, ему просто нужно вернуть opaque type протокола с помощью ключевого слова some. Компилятор Swift также сможет сохранить базовую идентичность  (identity) возвращаемого типа, в отличии от варианта с использованием протокола в качестве возвращаемого типа. SwiftUI использует opaque return types внутри своего протокола View, который возвращает some View в свойстве body.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии0

Построение графиков в SwiftUI

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

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

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

Выбор пал на SwifUI-Charts, который предлагает действительно красиво выглядящие графики и простую интеграцию.

Читать далее
Всего голосов 7: ↑5 и ↓2+3
Комментарии0