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) {
}