J'essaie d'utiliser je sais nsrange code> pour contenir une plage d'années, telle que
nsrange code> est utilisé principalement Pour filtrer, mais je veux boucler sur les éléments de la gamme. Est-ce possible sans convertir le
nsrange code> en un
nsarray code>? P> p>
4 Réponses :
N'oubliez pas qu'un Nsrange est une structure qui maintient deux entiers, représentant le début et la longueur de la plage. Vous pouvez facilement boucler sur tous les entiers contenus à l'aide d'une boucle pour boucle.
NSRange years = NSMakeRange(2011, 5); NSUInteger year; for(year = years.location; year < years.location + years.length; ++year) { // Use the year variable here }
Il semble que vous attendez pas un objet. Une fois que vous en avez créé une, vous pouvez utiliser ses membres dans un ancien (Travailler toujours sur l'hypothèse que vous " Réfléchir à Python.) Il y a la syntaxe dans l'Objc appelé énumération rapide pour itération sur le contenu d'un Une catégorie pourrait rendre cela plus facile, cependant: P > nsrange code> comme une plage de python
gamme code> objet. Ce n'est pas;
nsrange code> est simplement une structure
pour code> boucle: p>
nsarray code> qui est agréablement similaire à un python
pour code> boucle, mais puisque les nombres littéraux et primitifs ne peuvent pas être mis dans Un
nsarray code>, vous ne pouvez pas aller directement à partir d'un
nsrange code> à un tableau de cacao. p>
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for( NSNumber * yearNum in years ){
NSUInteger year = [yearNum unsignedIntegerValue];
// and so on...
}
Merci, dommage, il n'y a pas de soutien pour une énumération rapide pour Nsrange. pourrait me sauver du temps et des lignes de code
@Manroe: J'apprécie votre correction de mon erreur de codage, mais le Big "Edit:" Block était inapproprié; Cela aurait pu être un commentaire, le résumé de la modification ou vient vraiment de disparaître complètement.
Ceci est un peu une question ancienne, mais une alternative à l'utilisation d'un nsarray code> serait de créer un
nsindexset code> avec la plage souhaitée (en utilisant
indexwithdindexesinrange: CODE> ou
INITWITHIDEXESINRANGEDRANGE: CODE>), puis Utilisez une énumération de blocs comme dans https://stackoverflow.com/ A / 4209289/138772 . (Semblait pertinent comme je me souvenais de cela moi-même.) P>
Ma solution de remplacement pour cela, c'était de définir une macro juste pour faire du sténographie rapide. Pour l'appeler, vous faites: P> NSRangeEnumerate(NSUInteger i, range) {
}