Ответ 1
Использовать NSValue +valueWithRange:
. Чтобы вернуть структуру диапазона назад, используйте свойство rangeValue
.
[a addObject:[NSValue valueWithRange:r]];
...
NSRange r = a[4].rangeValue;
Вот что я хочу сделать:
NSRange r = NSMakeRange(0,5);
id a = [NSMutableArray a];
[a addObject: r]; // but NSRange is not a NSObject *
С булевым, я бы использовал такой код:
[a addObject: [NSNumber numberWithBool: YES]];
или с целым числом:
[a addObject: [NSNumber numberWithInteger: 3]];
Итак, что эквивалентно с NSRange
? То, что я действительно не хочу делать, это создать свой собственный подкласс NSObject
для достижения этого. Конечно, есть способ, с которым Apple уже предоставила?
Использовать NSValue +valueWithRange:
. Чтобы вернуть структуру диапазона назад, используйте свойство rangeValue
.
[a addObject:[NSValue valueWithRange:r]];
...
NSRange r = a[4].rangeValue;
[NSValue valueWithRange:r];
и вернуть его с помощью:
NSRange r = [rangeObject rangeValue];
Если вам нужно сохранить NSRange
в списке свойств, вы также можете включить NSRange
в NSString
с помощью функции NSStringFromRange
. И затем вы можете вернуть эту строку в диапазон с помощью функции NSRangeFromString
.
Другим вариантом может быть добавление этих диапазонов в NSIndexSet
, в зависимости от того, как вы собираетесь использовать их далее.