我有一个包含 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
? 最佳答案
如果你读过文档,你会注意到 matchesInString:options:range:
的 NSRegularExpression
方法返回 NSArray
对象的 NSTextCheckingResult
, 而不是 NSRange
s,所以难怪你不能直接把它们弄出来。
此外(您将来应该记住这一点,因为这是一个重要的区别), NSRange
是 C struct
,而不是 Objective-C 对象。这意味着它 不能直接存储在 NSArray
或其他 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];
关于iphone - 从 NSRegularExpression 匹配中获取 NSRange,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17652318/