6
votes

Comment puis-je utiliser Nsrange avec des entiers pour simplifier mon code?

Je viens de commencer à apprendre l'objectif-C et de créer une petite application de Compass qui affichera une direction lorsqu'elle tombe dans une gamme de titres. Cela fonctionne simplement bien, mais je me demande s'il existe une manière plus concise de l'écrire en utilisant nsrange . Après beaucoup de choses, il semble que nsrange est utilisé plus pour les fonctions de chaîne plutôt que pour les chiffres.

J'ai essayé de faire une instance de nsrange mon point de départ pour le rendre plus concis, je n'ai pas pu suivre la fonction qui constaterait si un numéro tombe dans un Nsrange .

Suis-je sur la bonne voie ici, ou je fais cela plus verbeux qu'il n'a besoin d'être?

Merci d'avance.

Voici mon point de saut d'arrêt échoué pour tenter de raccourcir le code: xxx

voici mon code actuel (fonctionne bien): xxx


0 commentaires

4 Réponses :


0
votes

Une plage prend un emplacement et une longueur. Donc, si vous voulez 80 à 100 degrés pour une gamme orientale, vous pouvez utiliser NSMakerange (80, 20). Cela créerait une gamme à partir de 80 degrés, couvrant 20 degrés.


0 commentaires

3
votes

Est-ce que je fais cela plus verbeux qu'il n'a besoin d'être? P>

oui. Lorsque vous souhaitez effectuer des opérations numériques, évitez NSNumber. La classe NSNumber n'existe que parce que les collections de l'Objective-C comme Nsarray, NSDictionary, etc. ne peuvent contenir que des objets Objective-C. Sinon, vous devez toujours utiliser un int code> ou nsinteger code> ou cgfloat code> ou double code> etc. p>

 int heading = [newHeading trueHeading];
 headingLabel.text = [NSString stringWithFormat:@"%d°", heading];

 if (10 < heading || heading > 350)
    directionLabel.text = @"N";
 else if (80 < heading && heading < 100)
    directionLabel.text = @"E";
 // and so on.


4 commentaires

Il est généralement préférable du cacao et du cacao Touch d'utiliser l'architecture indépendante Nsinteger et Nsuinteger plutôt que de INT.


@Chuck: Droite. Mais op utilise + numérowithint: donc je garde le int dans le code.


Merci, @kennytm. Beaucoup plus propre maintenant. @Chuck - a pris votre conseil sur Nsuinteger et utilisé aussi. J'ai initialement utilisé Numberwithint: parce que cela n'a pas lancé une exception, je l'ai donc gardé.


@Chuck NsdecimalLumberNombre est également utile lorsque vous travaillez avec des valeurs numériques sensibles aux valeurs décimales, comme lors du travail avec la devise. Checkout Ceci: Stackoverflow.com/a/422513/1152596



10
votes

À la fin de la fête, mais ce qui suit fonctionnerait et utilise des gammes, je crois:

NSRange easternRange = NSMakeRange (80, 20); 
NSRange southernRange = NSMakeRange (170, 20); 

NSInteger heading = 92;
if (NSLocationInRange(heading,easternRange)) {
  NSLog(@"Heading Easterly.");
} else if (NSLocationInRange(heading,southernRange)) {
  NSLog(@"Heading southerly.");
}


0 commentaires

0
votes

Si vous souhaitez une utilisation plus intégrée de la structure Nsrange, j'ai trouvé utile de comparer des parties de tableaux: xxx


0 commentaires