Это немного сложный вопрос, потому что Unicode сложен, но вы можете использовать NSRegularExpression
для этого:
NSString *s = @"where's the emoji ? ?";
NSRegularExpression *r = [NSRegularExpression regularExpressionWithPattern:@"\\p{Emoji_Presentation}" options:0 error:NULL];
NSRange range = [r rangeOfFirstMatchInString:s options:0 range:NSMakeRange(0, s.length)];
NSLog(@"location %lu length %lu", (unsigned long)range.location, (unsigned long)range.length);
производит:
2019-01-16 18:07:42.629 emoji[50405:6837084] location 18 length 2
Я использую шаблон \p{Unicode property name}
для сопоставления символов, которые имеют указанное свойство Unicode. Я использую свойство Emoji_Presentation
, чтобы получить символ, который по умолчанию представлен как эмодзи. Вам следует ознакомиться с Техническим стандартом Unicode® № 51 - Приложение A: Свойства Emoji и файлы данных и файлы данных, связанные в A.1, чтобы решить, какое свойство вам действительно нужно.