Разница между инициализаторами текста ("") и текста (дословно: "") в SwiftUI - PullRequest
2 голосов
/ 08 июня 2019

Я следовал инструкциям Apple SwiftUI .Попутно я часто использовал объект Text со следующим инициализатором:

/// Creates an instance that displays `content` verbatim.
public init<S>(_ content: S) where S : StringProtocol

Теперь, в пятом уроке серии, я встречал следующееиспользование Text:

Text(verbatim: "")

Описание в интерфейсе такое же, как и для другого инициализатора:

/// Creates an instance that displays `content` verbatim.
public init(verbatim content: String)

Вопрос

Что такое два инициализатора дляи чем они отличаются / когда я буду использовать какой?

Ответы [ 2 ]

5 голосов
/ 08 июня 2019

Text(verbatim: ) возвращает текст в том виде, как он есть - отсюда и дословное имя аргумента.

Text(:_) проверяет, является ли аргумент локализованным ключом .

Если это так, он возвращает соответствующую локализованную строку.

Если это не так, он напечатает текст дословно .

1 голос
/ 14 июня 2019

Как отмечалось в нескольких сеансах WWDC19, представляющих его, SwiftUI пытается обработать для вас по умолчанию целую кучу хороших платформ-граждан, которые конечные пользователи учитывают базовые требования приложения, но которые, как правило, усложняют работу.для разработчиков.

Локализация - одна из таких вещей - Text инициализаторы автоматически делают правильные вещи.Примеры:

  • Text(“Some Text”) обрабатывает строковый литерал как локализованный, потому что статически определенный текст почти всегда предназначен для текста пользовательского интерфейса.
  • То же самое для Text(“\(items.count) items”), который корректно локализует строку формата и вставляет интерполированное значение.
  • Text(item.name) динамически передает различные строки во время выполнения, поэтому текст почти наверняка является «содержимым», которое остается неизменным независимо от языкового стандарта (потому что это от пользователя, извне программы и т. Д.).

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

И если в вашем приложении биты не соответствуют этим предположениям, Text(verbatim:) и Text(_:tableName:bundle:comment:) позволяют создавать статический текст, который не является локализованным, и программный текст, который локализуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...