2016-10-05 3 views
0

Изучая документацию для ExpressibleByStringLiteral Я наткнулся на ExpressibleByExtendedGraphemeClusterLiteral. Хотя я понимаю, что реализация первого позволяет использовать строковые литералы для инициализации чего-то другого, кроме типа String, я не уверен, для чего используется последний.Что такое GraphemeCluster и что делает ExpressibleByExtendedGraphemeClusterLiteral?

На самом деле, после некоторого поиска я не уверен, что такое кластер графем - может кто-то объяснить, что это такое, а также, как он относится к протоколу, какие функции он предоставляет, если он реализован?

+1

Вы просмотрели https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/stringsClusters.html и https://developer.apple.com/reference/swift/expressiblebyextendedgraphemeclusterliteral ? – user28434

+0

У меня не было, но у меня теперь, спасибо. – Vamos

ответ

1

Графемный кластер представляет собой набор символов, которые вместе представляют собой индивидуальный символ, который пользователь увидит в строке на экране. Он обычно содержит «базовый символ» плюс то, что Apple называет «комбинированием меток» и используется, например, когда нет доступного предварительно помеченного единственного символа Юникода, который мог бы выполнить эту работу за вас.

Когда кластеры grapheme используются в строках, вы должны проявлять особую осторожность, чтобы любые функции, которые искали подстроки и т. Д., Могли правильно разграничить границы между кластерами.

Вы можете увидеть несколько примеров здесь:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

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

Смежные вопросы