我有一个包含 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 对象容器中。 NSArrayNSDictionary 和其他用于存储对象的 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/

10-10 20:48