Comment dois-je stocker une NSRange dans un NSMutableArray ou un autre récipient?
Voici ce que je veux faire:
NSRange r = NSMakeRange(0,5);
id a = [NSMutableArray a];
[a addObject: r]; //but NSRange is not a NSObject *
Avec un booléen, j'aimerais utiliser le code comme ceci:
[a addObject: [NSNumber numberWithBool: YES]];
ou avec un entier:
[a addObject: [NSNumber numberWithInteger: 3]];
Donc, ce qui est l'équivalent avec un NSRange
? Ce que je n'ai pas vraiment envie de le faire est de créer mon propre sous-classe de NSObject
pour accomplir cette tâche. Il y a certainement une façon, avec ce qu'Apple est déjà prévu?
Vous devez vous connecter pour publier un commentaire.
Utilisation NSValue de
+valueWithRange:
. Pour récupérer la gamme de la structure à l'arrière, utilisez la la propriétérangeValue
.NSArray
pouvez stocker des objets.NSRange
n'est pas un objet, mais vous pouvez l'envelopper avecNSValue
de sorte qu'il peut être utilisé parNSArray
,NSDictionary
etc.a
doit être générique:NSMutableArray<NSValue*>*
.et sortir avec:
Si vous avez besoin de stocker les
NSRange
dans une liste de propriétés, vous pouvez également activer uneNSRange
dans unNSString
à l'aide de laNSStringFromRange
fonction. Et ensuite, vous pouvez transformer cette chaîne en une plage à l'aide de laNSRangeFromString
fonction.NSValue
moi-même à partir d'autres réponses (merci @mipadi et @KennyTM), et c'est certainement moins elbowy que ma suggestion. Pour être plus digne de votre genre upvote, j'ai mis à jour ma réponse à mentionner que la version de chaîne peut être utile pour le stockage des plages dans les listes de propriété.Une autre option pourrait être d'ajouter des plages dans un
NSIndexSet
, en fonction de comment vous avez l'intention de les utiliser suivant.