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 J'ai essayé de faire une instance de Suis-je sur la bonne voie ici, ou je fais cela plus verbeux qu'il n'a besoin d'être? p> Merci d'avance. P> Voici mon point de saut d'arrêt échoué pour tenter de raccourcir le code: p> voici mon code actuel (fonctionne bien): p> nsrange code>. Après beaucoup de choses, il semble que
nsrange code> est utilisé plus pour les fonctions de chaîne plutôt que pour les chiffres.
nsrange code> 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 Code>. P>
4 Réponses :
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. P>
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.
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: code> donc je garde le
int code> 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
À 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."); }
Si vous souhaitez une utilisation plus intégrée de la structure Nsrange, j'ai trouvé utile de comparer des parties de tableaux: