2015-11-05 8 views
1

Я разрабатываю приложение, которое должно ограничивать ввод пользователем строкового текста до 200 символов.Как найти длину строки для многоязычного предложения в IOS

Пользователь может ввести строковое значение на любом языке.

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

Может ли кто-нибудь мне помочь.

Ожидаемый результат:

  • 'Роджер хороший парень' -19
  • 'रॉजर एक छान माणूस आहे' - 16
  • '罗杰 是 一个 好人' - 7
+0

Есть ли причина, по которой 'string.length' не работает? Вы на самом деле пытаетесь подсчитать глифы? – Avi

+0

@ Символы Avi - это другое понятие, чем глифы. Рассмотрим, например, лигатуры. 'ffi' - это лигатура, которая объединяет три символа в один символ. –

+0

Мне это хорошо известно. Я пытался получить вопрос о плакате, чтобы уточнить, что она хочет. Я придумал в основном тот же код, что и вы, как ответ, но я не публиковал его, потому что вы избили меня. – Avi

ответ

2

Возможно, вы ищете extended grapheme clusters, что является хорошим определением воспринимаемого пользователем символа. Окно Swift String's character обеспечивает это удобно.

Какао NSString обеспечивает enumerateSubstringsInRange:options:usingBlock:, которые могут быть использованы для подсчета «составленная последовательности символов», которая похожа:

@interface NSString (ComposedCharacterSequenceCount) 
@property (nonatomic, readonly, getter=nr_composedCharacterSequenceCount) NSInteger composedCharacterSequenceCount; 
@end 

@implementation NSString (ComposedCharacterSequenceCount) 
- (NSInteger)nr_composedCharacterSequenceCount 
{ 
    __block NSInteger count = 0; 
    [self enumerateSubstringsInRange:(NSRange){0, self.length} 
          options:NSStringEnumerationByComposedCharacterSequences | NSStringEnumerationSubstringNotRequired 
          usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) { 
           count += 1; 
          }]; 
    return count; 
} 
@end 

Этого фрагмент кода добавляет категорию в NSString, что позволяет вашим легко вычислить количество символов:

NSLog(@"count: %@", @(@"Roger is a nice guy".composedCharacterSequenceCount)); 
NSLog(@"count: %@", @(@"रॉजर एक छान माणूस आहे".composedCharacterSequenceCount)); 
NSLog(@"count: %@", @(@"罗杰是一个好人".composedCharacterSequenceCount)); 

печатает:

count: 19 
count: 16 
count: 7 
+0

Спасибо, Николай, отличная помощь. –

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

  • Нет связанных вопросов^_^