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
}
给定一个 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
}