176 votes

Attention : "characters" est obsolète : Veuillez utiliser directement String ou Substring

caractères - une propriété d'instance de String, est déprécié de avec Xcode 9.1

Il était très utile d'obtenir une sous-chaîne de caractères à partir de String en utilisant la fonction characters mais maintenant elle a été dépréciée et Xcode suggère d'utiliser la propriété substring . J'ai essayé de vérifier les questions de SO et les tutoriels/directives des développeurs Apple pour la même chose. Mais je n'ai pu voir aucune solution/alternative comme suggéré.

Voici le message d'avertissement :

L'option "caractères" est obsolète : Veuillez utiliser String ou Substring

enter image description here

J'ai tellement d'opérations sur les chaînes de caractères qui sont effectuées/traitées en utilisant la propriété characters .

Quelqu'un a-t-il une idée/des informations sur cette mise à jour ?

5 votes

Voici un article intéressant sur le String changements de Swift 3 à 4 et veuillez lire aussi SE0163

5 votes

Essayer d'utiliser count à la place.

1 votes

Si vous utilisiez string.characters.forEach la nouvelle API est string.forEach { char in process(char) }

276voto

songxunzhao Points 2729

Swift 4 a introduit des changements dans l'API des chaînes de caractères.
Vous pouvez simplement utiliser !stringValue.isEmpty au lieu de stringValue.characters.count > 0

pour plus d'informations, vous pouvez obtenir l'échantillon à partir de ici

par exemple

let edit = "Summary"
edit.count   // 7

0 votes

Merci pour votre réponse Mais puis-je avoir une référence détaillée de la sous-chaîne ? C'est juste un exemple, j'ai beaucoup d'autres opérations qui traitent des caractères.

1 votes

Veuillez vérifier les informations détaillées ici. developer.apple.com/library/content/documentation/Swift/

0 votes

Let greeting = "Bonjour, monde !" let index = greeting.index(of : ",") ? ? greeting.endIndex let beginning = greeting[..<index]

88voto

Exemples de Swift 4 vs Swift 3 :

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4

2 votes

Cela devrait être la réponse acceptée. La question porte sur le remplacement de string.characters.count, et non sur le remplacement de la comparaison à zéro, qui n'est mentionné que dans la capture d'écran.

9voto

tymac Points 7397

L'un des cas les plus courants de manipulation de chaînes de caractères est celui des réponses JSON. Dans cet exemple, j'ai créé une extension dans mon application de veille pour faire tomber les (n) derniers caractères d'un objet JSON Bitcoin.

Swift 3 :

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Message d'erreur de Xcode 9.1 :

L'option "caractères" est obsolète : Veuillez utiliser directement String ou Substring

Xcode nous dit d'utiliser la variable string ou la méthode directement .

Swift 4 :

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

Extension complète :

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

Appelez :

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

Console :

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

Exemples supplémentaires :

  • print("Spell has \(invisibleSpellName.count) characters.")

  • return String(dropLast(n))

  • return String(removeLast(n))

Documentation :

Vous utiliserez souvent des méthodes communes telles que dropLast() ou removeLast() ou count Voici donc la documentation explicite d'Apple pour chaque méthode.

droplast()

removelast()

le comptage des caractères

3voto

Pranavan Sp Points 648

Utilisez cette characters parce que String a cessé d'être une collection dans Swift 2.0. Cependant, ce code est toujours valable dans Swift 4 mais n'est plus nécessaire maintenant que String est un Collection encore.

Par exemple, un Swift 4 String a maintenant une propriété de comptage direct qui donne le nombre de caractères :

// Swift 4
let spString = "Stack"
spString.count           // 5

Exemples pour String et SubString.

Chaîne de caractères

Swift 4 String maintenant obtenir directement l'élément qui donne le premier caractère de la chaîne : (string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

Sous-chaîne

Utiliser SubString pour obtenir le premier caractère.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

0 votes

Je veux obtenir le premier caractère d'une chaîne de caractères et je veux savoir comment utiliser let firstElement = spString.first ou Substring ?

1 votes

@Pulkit Mieux vaut utiliser .first car si la chaîne est "" vide. Il ne retournera que nil mais substring produira une erreur.

0 votes

Comment convertir cette ligne de code en swift 4 'AuthorImageText = String(val.characters[(AuthorName.startIndex)]).capitalized'.

2voto

Boris Points 79

Cet avertissement n'est que le sommet de l'iceberg, il y a eu beaucoup de changements dans les chaînes de caractères, les chaînes de caractères sont encore une collection de caractères, mais nous avons quelque chose de nouveau et de cool, les sous-chaînes de caractères :)

C'est une excellente lecture à ce sujet : https://useyourloaf.com/blog/updating-strings-for-swift-4/

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