NSAttributedString: проверить, является ли NSRange действительным - PullRequest
0 голосов
/ 08 ноября 2018

С учетом NSRange и NSAttributedString, как лучше всего проверить, что диапазон действителен и не превысит границы приписанной строки?

Я пытаюсь сделать это:

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

Однако underlineRange можно манипулировать таким образом, чтобы он выходил за пределы диапазона mutableAttributedString. В этом случае это приводит к исключению.

Какой лучший способ справиться с этим делом? Я не могу найти метод NSAttributedString, который позволяет вам проверить, является ли диапазон допустимым для данной приписанной строки.

1 Ответ

0 голосов
/ 08 ноября 2018
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
}
...