640 votes

Comment puis-je vérifier si une chaîne contient une autre chaîne dans Swift?

Objective-C code pour vérifier subString dans une chaîne.

 NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
    NSLog(@"exists");
}
 

Mais comment faire cela en langage rapide.

1254voto

Jens Wirth Points 1363

Vous pouvez faire exactement le même appel avec Swift:

 var string = "hello Swift"

if string.rangeOfString("Swift") != nil{
    println("exists")
}

// alternative: not case sensitive
if string.lowercaseString.rangeOfString("swift") != nil {
    println("exists")
}
 

J'espère que c'est une solution utile puisque certaines personnes, y compris moi, ont rencontré des problèmes étranges en appelant containsString() .

PS. Ne pas oublier de import Foundation

201voto

Maxim Shoustin Points 20035

Manière d'extension

Vous pouvez écrire l'extension contains: pour String

 extension String {

    func contains(find: String) -> Bool{
       if let temp = self.rangeOfString(find){
          return true
       }
       return false
     }
}
 

Exemple:

 var value = "Hello world"

println(value.contains("Hello")) // true
println(value.contains("bo"))    // false
 

51voto

Cezar Points 6222

De la documentation, il semble que l'appelant containsStr() sur une Chaîne devrait fonctionner:

Swift type de Chaîne est intégrée de façon transparente à la Fondation NSString classe. Si vous travaillez avec la Fondation dans le cadre de Cacao ou de Cocoa Touch, l'ensemble de la NSString API est disponible à l'appel sur n'importe quel Valeur de chaîne que vous créez, en plus de la Chaîne fonctionnalités décrites dans le présent chapitre. Vous pouvez également utiliser une Chaîne de valeur avec une API qui nécessite un NSString instance.

Cependant, il ne semble pas fonctionner de cette façon.

Si vous essayez d'utiliser someString.containsString(anotherString), vous obtiendrez une erreur de compilation que les états 'String' does not contain a member named 'containsString'.

Donc, vous êtes de gauche avec quelques options, dont l'une est explicitement pont de votre String d'Objective-C en utilisant bridgeToObjectiveC() deux autres impliquent explicitement à l'aide d'un NSString et la dernière consiste en un moulage de la String d'un NSString

Par pontage, vous obtiendrez:

var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
    println("YES")
}

En tapant la chaîne comme un NSString, vous obtenez:

var string: NSString = "hello Swift"
if string.containsString("Swift") {
    println("YES")
}

Si vous avez un String, vous pouvez initialiser un NSString à l'aide de NSString(chaîne:):

var string = "hello Swift"
if NSString(string: string).containsString("Swift") {
    println("YES")
}

Et enfin, vous pouvez lancer une existante String d'un NSString comme ci-dessous:

Si vous disposez déjà d'une Chaîne de caractères, vous pouvez initialiser un NSString à l'aide de NSString(chaîne:):

var string = "hello Swift"
if (string as NSString).containsString("Swift") {
    println("YES")
}

10voto

user1021430 Points 278

De toutes les réponses ici, je pense qu'ils ne fonctionnent pas, ou ils sont un peu un hack (renvoyer à NSString). Il est très probable que la réponse correcte à cette question a changé avec les différentes versions bêta.

Voici ce que j'utilise:

 let string: String = "hello Swift"
if string.rangeOfString("Swift") != nil
{
    println("exists")
}
 

Le "! = Nil" est devenu obligatoire avec Beta 5.

9voto

Ken Points 21

Voici mon premier coup de poignard à cela dans l’aire de jeu rapide. J’étends String en fournissant deux nouvelles fonctions (contient et containsIgnoreCase)

Utilisez-le comme ceci

J’apprécierais tout commentaire  :)

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