4 votes

Ajouter une chaîne de caractères au texte de l'étiquette UILabel ?

Je commence à développer pour l'iPhone. J'ai une question de débutant, j'en suis sûr :

J'ai ceci, qui fonctionne :

testLabel.text = [NSString stringWithFormat:@"%@ to %@", testLabel.text, newLabelText];

J'aimerais pouvoir utiliser l'opérateur "+=", mais j'obtiens une erreur de compilation (Invalid operands to binary +, have 'struct NSString *' and 'struct NSString *') :

testLabel.text += [NSString stringWithFormat:@"to %@", newLabelText];

Pourquoi ne puis-je pas faire cela ?

Par ailleurs, comment puis-je raccourcir mon premier extrait de code ?

5voto

Tim Points 33042

Pensez à utiliser une chaîne NSMutableString - vous pouvez utiliser la fonction appendString: comme dans :

NSMutableString *str = [@"hello" mutableCopy];
[str appendString:@" world!"];

5voto

Adam Rosenfield Points 176408

Vous ne pouvez pas utiliser le += car le C et l'Objective-C ne permettent pas la surcharge des opérateurs. Vous essayez d'utiliser += avec deux types de pointeurs, ce qui n'est pas autorisé -- si le côté gauche d'un += a un type de pointeur, alors le côté droit doit être d'un type intégral, et le résultat est une arithmétique de pointeur, ce qui n'est pas ce que vous voulez dans ce cas.

2voto

Zaph Points 40557

Cela n'est pas possible car ObjectiveC ne le supporte pas, ObjectiveC est une petite couche au-dessus de C.

testLabel.text = [testLabel.text stringByAppendingFormat:@" to %@", newLabelText];

1voto

ACBurk Points 3460

Les NSString ne sont PAS mutables (elles ne peuvent pas être modifiées), c'est pourquoi vous ne pouvez pas utiliser +=.

NSMutableString peut être modifié. Vous pourriez les utiliser ici.

Votre code est déjà assez minimal. L'Objective-C est un langage expressif, il faut donc s'habituer à des noms de fonctions et de variables longs et descriptifs.

0voto

lochiwei Points 156

Essayez ceci :

// usage: label.text += "abc"
public func += (a:inout String?, b:String) {
    a = (a ?? "") + b
}

essayez cet opérateur personnalisé :

let label = UILabel()
label.text = "abc"
label.text += "_def"
print(label.text)    // “abc_def”

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