NSAttributedString:检查 NSRange 是否有效

NSAttributedString: check if NSRange is valid

给定一个 NSRange 和一个 NSAttributedString,验证范围有效且不会超出属性字符串边界的最佳方法是什么?

我正在尝试这样做:

[mutableAttributedString enumerateAttribute:NSFontAttributeName inRange:underlineRange  options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(id  value, NSRange range, BOOL * _Nonnull stop) {
....

然而,underlineRange 可以以超出 mutableAttributedString 范围的方式进行操作。在那种情况下,它最终会导致异常。

处理这种情况的最佳方法是什么?我找不到任何 NSAttributedString 方法可以让您验证给定属性字符串的范围是否有效。

NSRange underlineRange = ...;

NSRange fullRange = NSMakeRange(0, mutableAttributedString.length);
underlineRange = NSIntersectionRange(underlineRange, fullRange);
if (underlineRange.length == 0) {
    // intersection is empty - underlineRange was entirely outside the string
} else {
    // underlineRange is now a valid range in mutableAttributedString
}