Comment faire pour supprimer les caractères spéciaux de la chaîne dans la Swift 2?
La réponse dans
Comment démonter les caractères spéciaux de la chaîne?
n'est pas de travail.
Voici ce que j'ai eu et ça me donne une erreur
func removeSpecialCharsFromString(str: String) -> String {
let chars: Set<String> = Set(arrayLiteral: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_")
return String(str.characters.filter { chars.contains($0) }) //error here at $0
}
L'erreur à 0$, dit _Element(aka Personnage) ne peut pas être convertie devrait argument de type 'String'.
- La ligne
let text = str
est tout simplement ridicule. - Dans votre lié question, l'opération est effectuée sur
filter(text)
tandis que vous la faites surtext.characters
qui est un tableau, et la Chaîne n'a pas d'initialisation à l'aide de la matrice de caractères et donc votre fonction échoue.
Vous devez vous connecter pour publier un commentaire.
Comme ceci:
Et voici comment test:
SWIFT 4:
Plus le moyen le plus propre:
Utiliser cette extension comme:
De sortie: "certains.Texte"
Je pense qu'une solution de nettoyage pourrait être cette approche:
Dans Swift 1.2,
créé un ensemble contenant tous les caractères de la chaîne.
Dans Swift 2.0 ce qui doit être fait comme
La raison en est qu'une chaîne de caractères elle-même n'a pas de plus se conformer à
SequenceType
, vous devez utiliser lecharacters
vue explicitement.Avec ce changement, votre méthode compile et fonctionne comme prévu:
Remarque: @Kametrixom suggéré de créer le jeu qu'une seule fois. Donc si il est
problème de performance avec la méthode ci-dessus vous pouvez soit déplacer le
déclaration de l'ensemble à l'extérieur de la fonction, ou d'en faire un
local
static
:chars
à l'extérieur de la fonction, comme il peut être créé à chaque fois que la fonction est appeléeSi vous avez besoin de garder uniquement des caractères ascii imprimables dans une chaîne de caractères, vous pouvez simplement filtrer vérifier si leur unicodeScalar valeurs ascii: