Глубокое погружение в самый простой вид SwiftUI

Добро пожаловать во второй эпизод этого анализа текстового представления в SwiftUI. Если вы пропустили первую серию, вы можете найти ее здесь.

Во второй части я расскажу:

  • Уценка
  • Добавление текстовых представлений
  • Изображения в тексте
  • Даты
  • Форматирование
  • Доступность

Без дальнейших церемоний, давайте начнем с первого аргумента.

Уценка

Последняя версия iOS, итерация номер 15, позволила нам очень просто использовать помеченный текст внутри текстового представления. Теперь вы можете создавать жирный шрифт, курсив, ссылки и т. д. в простой строке без необходимости использовать AttributedStringanymore. Вот:

Итак, просто примените простой синтаксис уценки, и все готово. Как Магия!

Добавление текстовых представлений

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

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

Эта новая функция действительно очень мощная… еще раз до свидания AttributedString!

Изображения в тексте

Кажется, что все новые улучшения текстового представления направлены на то, чтобы полностью исключить AttributedStrings… теперь с текстовыми представлениями можно также добавлять изображения в текст. Начиная с iOS 14 вы можете использовать инициализатор init(_ image), который создает экземпляр, обертывающий Image, подходящий для объединения с другими текстовыми представлениями.

Давайте рассмотрим пример… это тоже совет 😁

Я нахожу это действительно крутым!

Даты

Во многих приложениях принято показывать даты по-разному. В старые времена UIKit отображение дат было более сложной задачей… вам приходилось создавать средство форматирования, возможно, передавая не очень читаемый строковый формат, преобразовывать дату и помещать результат в UILabel. Со SwiftUI это стало невероятно просто и быстро. Просто используйте инициализатор init(:, style:) и выберите стиль:

style — это структура типа DateStyle с различными статическими переменными на выбор. Конечно, все эти параметры относятся к вашей локали или к указанной, поэтому нет необходимости выполнять преобразования.

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

Вы также можете использовать timeInterval между двумя датами и знаете что? Текст покажет время начала и время окончания данного интервала! Довольно круто, а? Взгляните на этот пример:

Вы даже можете использовать DateInterval init в одном из множества доступных вариантов. Что-то вроде этого, например:

Возможно, вы заметили одну замечательную вещь: формат даты меняется автоматически в зависимости от заданного диапазона. В первом текстовом представлении разница заключается в том же дне, поэтому компилятор отображает только часы. Вместо этого во втором текстовом представлении система дает нам две даты с днем ​​и месяцем. Отлично, отлично!

Форматирование

В SwiftUI форматирование любого типа значения в текстовые представления стало очень простым. Вы можете форматировать и отображать практически любые данные, используя параметр format файла init. format принимает объект o, соответствующий протоколу FormatStyle. Полный список см. в Документации Apple.

Например, вы можете отформатировать значение процентиля:

Или валюта:

Или любое измерение:

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

.environment(\.locale, .init(identifier: "it"))

Конечно, вы также можете отформатировать простые числа:

Параметры форматирования текстового представления настолько круты, что вы также можете использовать контакт в форме PersonNameComponens:

Если вы считаете, что этого недостаточно, Formatter принимает и массивы!

Взгляните на эти примеры:

Как вы уже видели, сила форматирования SwiftUI Text действительно мощная!

Доступность

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

Text View поставляется с интересными функциями для управления функцией VoiceOver. Наиболее важными, вероятно, являются:

func speechAlwaysIncludesPunctuation(Bool) -> Text

который устанавливает, должен ли VoiceOver всегда произносить все знаки препинания в текстовом представлении и:

func speechSpellsOutCharacters(Bool) -> Text

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

Используя доступность, вы всегда должны предоставлять информацию о доступности. Наиболее важную информацию дают:

func accessibilityLabel(_ label: Text) -> Text

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

Еще одна очень важная информация — это тип текстового контента:

func accessibilityTextContentType(_ value: AccessibilityTextContentType) -> Text

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

Эпилог

На данный момент это все, что касается этого удивительного базового представления. Вероятно, в следующей версии SwiftUI в iOS 16 Apple добавит в этот компонент другие удивительные функции.

Надеюсь, вам понравилась эта статья, если да, пожалуйста, хлопните в ладоши.

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

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

Спасибо и удачного кодирования!