Existe-t-il une méthode startsWith () ou quelque chose de similaire dans Swift?
J'essaye essentiellement de vérifier si une certaine chaîne commence par une autre chaîne. Je veux aussi que ce soit insensible à la casse.
Comme vous pourrez peut-être le dire, j'essaie simplement de faire une fonction de recherche simple, mais je semble échouer lamentablement à cela.
Voici ce que j'aimerais:
taper "sa" devrait me donner des résultats pour "San Antonio", "Santa Fe", etc. taper "SA" ou "Sa" ou même "sA" devrait également renvoyer "San Antonio" ou "Santa Fe".
J'utilisais
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
avant iOS9 et cela fonctionnait très bien. Cependant, après la mise à niveau vers iOS9, il a cessé de fonctionner et les recherches sont désormais sensibles à la casse.
var city = "San Antonio"
var searchString = "san "
if(city.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("San Antonio starts with san ");
}
var myString = "Just a string with san within it"
if(myString.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("I don't want this string to print bc myString does not start with san ");
}
Réponses:
utiliser à la
hasPrefix
place destartsWith
.Exemple:
la source
"string".lowercased()
voici une implémentation d'extension Swift de startsWith:
Exemple d'utilisation:
la source
Pour répondre spécifiquement à la correspondance de préfixe insensible à la casse :
en pur Swift (recommandé la plupart du temps)
ou:
note: pour un préfixe vide, les
""
deux implémentations renverronttrue
en utilisant Foundation
range(of:options:)
note: pour un préfixe vide
""
il retournerafalse
et être moche avec une regex (je l'ai vu ...)
note: pour un préfixe vide,
""
il retournerafalse
la source
Dans Swift 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Element
sera introduit.Exemple d'utilisation:
la source
Edit: mis à jour pour Swift 3.
La classe Swift String a la méthode sensible à la casse
hasPrefix()
, mais si vous voulez une recherche insensible à la casse, vous pouvez utiliser la méthode NSStringrange(of:options:)
.Remarque: par défaut, les méthodes NSString ne sont pas disponibles, mais si vous
import Foundation
.Alors:
Les options peuvent être données comme
.caseInsensitive
ou[.caseInsensitive]
. Vous utiliseriez la seconde si vous vouliez utiliser des options supplémentaires, telles que:Cette approche a également l'avantage de pouvoir utiliser d'autres options avec la recherche, comme les
.diacriticInsensitive
recherches. Le même résultat ne peut pas être obtenu simplement en utilisant. lowercased()
sur les chaînes.la source
Version Swift 3:
la source
.anchored
. Voir ma réponse ou la réponse d'Oliver Atkinson.Dans Swift 4 avec extensions
Mon exemple d'extension contient 3 fonctions: vérifiez faire un début de chaîne avec une sous-chaîne, faire une fin de chaîne à une sous-chaîne et faire une chaîne contient une sous-chaîne.
Définissez le paramètre isCaseSensitive sur false, si vous souhaitez ignorer les caractères "A" ou "a", sinon définissez-le sur true.
Voir les commentaires dans le code pour plus d'informations sur son fonctionnement.
Code:
Exemples d'utilisation:
Pour vérifier, la chaîne commence par "TEST":
Pour vérifier, la chaîne commence par "test":
Pour vérifier, la chaîne se termine par "G123":
Pour vérifier, la chaîne se termine par "g123":
Pour vérifier si la chaîne contient "RING12":
Pour vérifier si la chaîne contient "ring12":
la source