3

我有一个包含NSRange元素的数组。

现在我可以使用[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

4

2 回答 2

5

如果您阅读过文档,您会注意到该matchesInString:options:range:方法NSRegularExpression返回的NSArrayNSTextCheckingResult对象的 an,而不是 NSRanges,因此无法直接将它们取出也就不足为奇了。

此外(你应该记住这一点以备不时之需,因为它是一个重要的区别),NSRange是一个Cstruct,而不是一个 Objective-C 对象。这意味着它不能直接存储在NSArrays 或其他 Objective-C 对象容器中。 NSArray,NSDictionary和其他用于存储对象的Objective-C 类只能存储Objective-C 类型的对象,即作为a 实例的对象Class并且可以将消息发送给它们[object method]

现在回到您的问题,您从中获取的数组matchesInString:options:range:包含NSTextCheckingResult对象,这些对象包含的信息不仅仅是匹配范围,因此您不能只将它们转换为NSRange; 你需要访问range对象的属性来得到你想要的:

NSTextCheckingResult *result = [matches lastObject];
NSRange range = [result range];
于 2013-07-15T10:46:17.987 回答
1

NSRange是一个 C 结构。

NSArray不包含 C 类型,只有对象。

NSRegularExpression返回一个匹配的NSArray,其中包含NSTextCheckingResult类型的对象。

NSTextCheckingResult有一个 range 属性,它返回匹配的范围。

于 2013-07-15T10:49:17.623 回答