2013-07-15 3 views
3

У меня есть массив, который содержит NSRange элементов.Получить NSRange из соответствия NSRegularExpression

Теперь я могу получить последний элемент диапазона массива, используя [resultArray lastObject].

Когда я обращаюсь к последнему элементу, он возвращает неизвестный объект. (Что означает Неизвестный класс)

Теперь я хочу, чтобы объект был превращен в NSRange. Как это сделать?

Мой код:

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:paraStartRegEx options:NSRegularExpressionCaseInsensitive error:&error]; 
NSArray *matches = [regex matchesInString:content options:0 range:NSMakeRange(0, [content length])]; 
NSObject *obj = [matches lastObject]; 

Как я могу преобразовать этот объект в NSRange?

ответ

5

Если вы читали документацию, вы бы заметили, что matchesInString:options:range: метод NSRegularExpression возвращает NSArray из NSTextCheckingResult объектов, неNSRange с, так что не удивительно, что вы не могли получить их непосредственно.

Кроме того (и вы должны помнить об этом в будущем, так как это важное различие), NSRange является C struct, не является объектом Objective-C. Это означает, что он не может быть непосредственно сохранен в NSArray s или других объектных контейнерах Objective-C.NSArray, NSDictionary, а также другие классы Objective-C, которые используются для хранения объектов может хранить только объекты типов Objective-C, то есть, объекты, которые являются экземпляром Class и могут иметь сообщения, отправленные на них с [object method].

Теперь, чтобы вернуться к вашему вопросу, то массив, вы получаете от matchesInString:options:range: содержит NSTextCheckingResult объекты, которые содержат гораздо больше информации, чем просто диапазон матча, так что вы не можете просто бросить их в NSRange; Вы должны получить доступ к range свойство объекта, чтобы получить то, что вы хотите:

NSTextCheckingResult *result = [matches lastObject]; 
NSRange range = [result range]; 
+0

Спасибо, что поделились своими знаниями – Kirubachari

1

NSRange является C структурой.

NSArray не содержит типы C, только объекты.

NSRegularExpression возвращает матч NSArray, который содержит объекты NSTextCheckingResult типа.

NSTextCheckingResult имеет свойство range, которое возвращает диапазон совпадений.

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