NSRange: gamme.emplacement de choix != NSNotFound vs gamme.length > 0
Je vais à travers certains anciens de code dans une de mes applications, et fixer en place le code dans des domaines qui pourraient être potentiellement problématiques.
Je vois beaucoup de vieux code à l'aide de...
NSRange range = //determine range here....
if(range.length > 0)
{
//do stuff
}
Est que le code "fin", ou devrais-je la changer?
NSRange range = //determine range here....
if(range.location != NSNotFound)
{
//do stuff
}
Sont ces deux méthodes identiques, pour l'essentiel, ou pas?
OriginalL'auteur MikeS | 2012-10-10
Vous devez vous connecter pour publier un commentaire.
Les deux contrôles ne sont pas toujours identiques. Il dépend de la façon dont la gamme a été généré. Exemple:
La gamme de longueur est 0, mais son emplacement est de 5, pas
NSNotFound
.Pour une référence ici à ce que la documentation est-à-dire pour
NSRegularExpressions
: Si le résultat retourné est non-nul, alors [suite intervalle] sera toujours une plage valide, de sorte qu'il n'est pas nécessaire de le comparer à {NSNotFound, 0}. Toutefois, pour certaines expressions régulières (mais pas l'exemple de schéma) certains groupes de capture peut ou ne peut pas participer à un match. Si un groupe de capture ne pas participer à un match, puis [suite rangeAtIndex:idx] sera de retour {NSNotFound, 0}.OriginalL'auteur rob mayoff
La réponse dépend de la fonction/méthode que vous utilisez.
NSRange
est juste une struct si vous avez besoin de lire la documentation de la fonction/méthode que vous appelez.Exemples:
NSRangeFromString
Renvoie une gamme à partir d'une représentation textuelle.
Dans ce cas, la vérification de
NSNotFound
ne fonctionnerait pas.-[NSString rangeOfString:]
Ici, il est documenté que l'emplacement sera
NSNotFound
et lalength
sera de 0 donc soit à des contrôles de travail, cependant, je vous recommande de vérifier l'emplacement contreNSNotFound
.Oui, lire la documentation pour déterminer ce que vous devez vérifier.
OriginalL'auteur Joe
NSNotFound est défini comme "NSIntegerMax". Même si elles produisent le même résultat de votre second écran est beaucoup plus lisible et auto-documentation. Peut-être que vous ne devriez pas tous les trouver et de le modifier, mais il suffit de passer à aller de l'avant.
Je pense que nous sommes maintenant juste de parler de style puisque je crois que les deux donnent le même résultat. Je pense juste que si vous avez lu le second, il coule et fait sens ", l'emplacement de la plage se trouve ou non trouvé" par opposition à la première, qui exige l'interprétation. De toute façon c'est assez mineur, et vous pouvez juste choisir une convention pour la totalité du fichier à des fins de cohérence souci.
OriginalL'auteur rooster117