Как отделить emojis, введенный (через клавиатуру по умолчанию) в текстовое поле

Я ввел две emojis в текстовое поле 👨👨👧👧😍, здесь я получаю общее количество из 5 символов, тогда как 4 символа для первого emoji и 1 символ для второго. Похоже, что яблоко объединило 4 emojis, чтобы сформировать один.

Я ищу быстрый код, в котором я могу отдельно отделять каждый из emojis, предположим, взяв приведенный выше пример, я должен получать 2 строки / символ отдельно для каждого emoji.

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

Заранее спасибо.

2 Solutions collect form web for “Как отделить emojis, введенный (через клавиатуру по умолчанию) в текстовое поле”

Обновление для Swift 4 (Xcode 9)

Что касается Swift 4 (протестирован с использованием Xcode 9 beta), то «Последовательность Emoji ZWJ» рассматривается как один Character как это предусмотрено стандартом Unicode 9:

 let str = "👨‍👨‍👧‍👧😍" print(str.count) // 2 print(Array(str)) // ["👨‍👨‍👧‍👧", "😍"] 

Также String представляет собой набор его символов (снова), поэтому мы можем вызвать str.count чтобы получить длину, и Array(str) чтобы получить все символы в виде массива.


(Старый ответ для Swift 3 и ранее)

Это лишь частичный ответ, который может помочь в этом конкретном случае.

«👨👨👧👧» действительно представляет собой комбинацию из четырех отдельных символов:

 let str = "👨‍👨‍👧‍👧😍" // print(Array(str.characters)) // Output: ["👨‍", "👨‍", "👧‍", "👧", "😍"] 

которые склеены вместе с U + 200D (ZERO WIDTH JOINER):

 for c in str.unicodeScalars { print(String(c.value, radix: 16)) } /* Output: 1f468 200d 1f468 200d 1f467 200d 1f467 1f60d */ 

Перечисление строки с параметрами .ByComposedCharacterSequences сочетает эти символы правильно:

 var chars : [String] = [] str.enumerateSubstringsInRange(str.characters.indices, options: .ByComposedCharacterSequences) { (substring, _, _, _) -> () in chars.append(substring!) } print(chars) // Output: ["👨‍👨‍👧‍👧", "😍"] 

Но есть и другие случаи, когда это не работает, например, «флаги», которые представляют собой последовательность «Региональные символы индикатора» (ср. Swift countElements () возвращают неверное значение, когда флаг флагов emoji ). С

 let str = "🇩🇪" 

результат этого цикла

 ["🇩", "🇪"] 

что не является желаемым результатом.

Полные правила определены в «Графических кластерах Графема» в «Стандартном приложении № 29 UNICODE TEXT SEGMENTATION» в стандарте Unicode.

Вы можете использовать этот пример кода или этот модуль .

Чтобы использовать его в Swift, импортируйте категорию в свой YourProject_Bridging_Header

 #import "NSString+EMOEmoji.h" 

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

 let example: NSString = "👨‍👨‍👧‍👧😍" // your string let ranges: NSArray = example.emo_emojiRanges() // ranges of the emojis for value in ranges { let range:NSRange = (value as! NSValue).rangeValue print(example.substringWithRange(range)) } // Output: ["👨‍👨‍👧‍👧", "😍"] 

Я создал небольшой пример проекта с приведенным выше кодом.

Для дальнейшего чтения эта интересная статья из Instagram .

  • ActionSheet не работает iPad
  • Текст перескакивает в UITextField при редактировании
  • NSURLErrorDomain код ошибки 1002 описание
  • Сделать все конечные точки ожидания одной точной конечной точкой
  • Стирание типа Swift с общим перечислением и общим протоколом
  • Войдите в систему с помощью Google на Parse (сервер с открытым исходным кодом)
  • Swift2.0 HTTP-запрос не работает
  • Изменение ширины границы UISegmentedControl в iOS 8
  • Как проверить, равны ли 3 строки в Swift?
  • Быстрая оптимизация компилятора для последовательных функций цикла
  • Обработка фонового градиента навигационной панели в iPhone X
  • Interesting Posts

    Получение имени пользователя через MDM путем настройки параметров Enterprise App (AirWatch)

    «Дублируемое определение интерфейса» неожиданно происходит при архивировании и использовании контейнеров из какао

    Как работает веб-сайт whatsapp на iOS?

    быстрый таймер недействительности не работает

    Как изменить кодировку текста файла Localizable.strings в Xcode 4?

    NSPredicate, отфильтровывающий результаты подкласса

    Sprite-Kit для проблем с масштабированием UIPinchGestureRecognizer

    Как сохранить строку JSON для одного поля Sqlite в iOS?

    Ошибка Simulator недоступна (Xcode 6.1)

    Ошибка компиляции Xcode на bool, когда устройство не подключено

    Поиск инструмента для создания сложного UIBezierPath

    Когда границы и рамки установлены для видов / слоев в Swift?

    MonoTouch: не найден компилятор gcc

    Как получить все изображения, хранящиеся в устройстве, и показать их как галерею в iPhone sdk

    Xamarin: Binding ios protocol / delegate не может получить доступ к перечислению, определенному в structs.cs

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.