811 votes

Obtenez la longueur d'une chaîne

Comment obtenez-vous la longueur d'un String ? Par exemple j'ai une variable définie comme:

 var test1: String = "Scott"
 

Cependant, je n'arrive pas à trouver une méthode de longueur sur la chaîne.

1327voto

milesper Points 860

Utilisez la méthode des caractères de comptage:

 let unusualMenagerie = "Koala  

342voto

Cezar Points 6222

TLDR:

Utilisation de la fonction globale countElements(test1). Mais, il ya quelques choses que vous devez savoir. Alors, lisez la suite.

Le comptage des caractères en Swift

Le plus précis, mais aussi plus coûteux en termes de performances est l' countElements fonction globale.

countElements(test1)

Il sera de retour le nombre de caractères Unicode en une String, il est donc plus correct de rechange dans le sens que, si vous souhaitez imprimer la chaîne et de compter les caractères à la main, vous obtiendrez le même résultat.

Toutefois, en raison de la façon dont Strings sont mis en œuvre de Swift, les personnages ne prennent pas toujours la même quantité de mémoire, donc être conscient que cela se comporte tout à fait différemment de l'habitude, le nombre de caractères méthodes dans d'autres langues.

Par exemple, vous pouvez également explicitement pont d'Objective-C et de l'utilisation de l' NSString length méthode.

test1.bridgeToObjectiveC().length

C'est effectivement la même que test1.utf16Count

Mais, comme indiqué ci-dessous, la valeur retournée n'est pas garanti d'être le même que celui de l'appel d' countElements()

À partir de la langue de référence:

Différents caractères Unicode et les différentes représentations de la même Caractère Unicode peuvent nécessiter différentes quantités de mémoire pour stocker des. De ce fait, les personnages de Swift ne pas prendre chacun la même quantité de mémoire au sein d'une chaîne de la représentation. En conséquence, la la longueur d'une chaîne ne peut pas être calculée sans itération dans la chaîne de réfléchir à chacun de ses personnages à tour de rôle. Si vous travaillez avec en particulier la longue chaîne des valeurs, sachez que la countElements la fonction doit effectuer une itération sur les caractères au sein d'une chaîne afin de calculer le précise le nombre de caractères de cette chaîne.

Notez également que le nombre de caractères retournée par countElements n'est pas toujours la même que la longueur de la propriété d'un NSString qui contient les mêmes personnages. La longueur d'un NSString est basé sur le nombre de code 16 bits unités au sein de la chaîne de la représentation UTF-16 et pas le nombre de caractères Unicode au sein de la chaîne. Afin de refléter cette de fait, la longueur de la propriété de NSString est appelé utf16Count quand il est consulté sur une Swift de la Chaîne de valeur."

Un exemple qui illustre parfaitement la situation décrite ci-dessus est celle de la vérification de la longueur d'une chaîne de caractères contenant un seul emoji caractère, comme l'a souligné n00neimp0rtant dans les commentaires.

var emoji = "

63voto

Lee Whitney Points 3570
let str = "Hello"
int count = str.length    // returns 5

extension String {
    var length: Int {
        get {
            return countElements(self)
        }
    }
}

24voto

Si vous essayez juste de voir si une chaîne est vide ou non (en vérifiant la longueur de 0), Swift offre une méthode de test booléenne simple sur String

 myString.isEmpty
 

L'autre côté de cette pièce était les gens qui demandaient dans ObjectiveC comment demander si une chaîne était vide où la réponse était de vérifier une longueur de 0:

NSString est vide

14voto

Jean Le Moignan Points 2364

Voici quelque chose de plus court, et plus naturel que d'utiliser une fonction globale:

 aString.utf16count
 

Je ne sais pas si c'est disponible en beta 1, cependant. Mais c'est définitivement là en beta 2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X