Dans Objective-C
le code pour vérifier une sous-chaîne dans un NSString
est:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
Mais comment faire cela dans Swift?
Réponses:
Vous pouvez faire exactement le même appel avec Swift:
Swift 4 et Swift 5
Dans Swift 4, String est une collection de
Character
valeurs, ce n'était pas comme ça dans Swift 2 et 3, vous pouvez donc utiliser ce code 1 plus concis :Swift 3.0+
Swift plus âgé
J'espère que c'est une solution utile car certaines personnes, dont moi, ont rencontré d'étranges problèmes en appelant
containsString()
. 1PS. N'oubliez pas
import Foundation
Notes de bas de page
la source
An NSRange structure giving the location and length in the receiver of the first occurrence of aString. Returns {NSNotFound, 0} if aString is not found or is empty (@"").
Alors peut-être que la simple vérificationnil
ne fonctionnera pas correctement.{NSNotFound, 0}
il est représenté pour vous comme nul. S'il s'agit d'une plage réelle, elle est représentée pour vous sous la forme d'une plage Swift (facultative). Cool.NSString
« s.rangeOfString()
. Ceci appelleString
's.rangeOfString()
, qui est déclaré commefunc rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
Voie d'extension
Swift 4
Généralement, Swift 4 contient une méthode, mais elle est disponible à partir d'iOS 8.0+
Swift 3.1
Vous pouvez écrire l'extension
contains:
etcontainsIgnoringCase
pourString
Ancienne version Swift
Exemple:
la source
Foundation
autour ... çacontainsString
marche bien.D'après les documents, il semble que l'appel
containsString()
à une chaîne devrait fonctionner:Cependant, cela ne semble pas fonctionner de cette façon.
Si vous essayez d'utiliser
someString.containsString(anotherString)
, vous obtiendrez une erreur de temps de compilation qui indique'String' does not contain a member named 'containsString'
.Donc, il vous reste quelques options, dont l'une consiste à relier explicitement votre
String
à Objective-C en utilisant lesbridgeToObjectiveC()
deux autres impliquent l'utilisation explicite d'unNSString
et la dernière implique de lancer leString
vers unNSString
En créant un pont, vous obtiendriez:
En tapant explicitement la chaîne en tant que an
NSString
, vous obtiendrez:Si vous en avez un
String
, vous pouvez initialiser une NSString à partir de celle-ci en utilisant NSString (string :):Et enfin, vous pouvez convertir un existant
String
en unNSString
comme ci-dessousla source
[__NSCFString containsString:]: unrecognized selector sent to instance
. De plus, je ne trouve pas la méthodecontainsString
dans les documents de développement pour confirmer si c'est nouveau pour iOS 8.Un autre. Prend en charge les options de casse et diacritiques.
Swift 3.0
Usage
iOS 9+
Fonction insensible à la casse et aux signes diacritiques disponible depuis iOS 9.
la source
Depuis Xcode 7.1 et Swift 2.1
containsString()
fonctionne bien pour moi.Swift 4:
Et un exemple Swift 4 insensible à la casse:
Ou en utilisant une
String
extension insensible à la casse :la source
import Foundation
, sinon cela ne fonctionnera pas.import UIKit
deimport Foundation
est nécessaire, au moins avec iOS 11 et Swift 4.Dans Swift 4.2
Utilisation
Exemple
la source
> DANS SWIFT 3.0
Production
la source
Vous pouvez le faire très facilement dans Swift en utilisant le code:
la source
Juste un addendum aux réponses ici.
Vous pouvez également effectuer un test local insensible à la casse en utilisant:
Exemple:
MISE À JOUR
Cela fait partie du Framework Foundation pour iOS et Mac OS X 10.10.x et faisait partie de 10.10 au moment de ma publication d'origine.
la source
Voici mon premier coup de couteau à cela dans la cour de récréation rapide. J'étends String en fournissant deux nouvelles fonctions (contient et contientIgnoreCase)
Utilisez-le comme ça
J'accueillerais vos commentaires :)
la source
De toutes les réponses ici, je pense que soit elles ne fonctionnent pas, soit elles sont un peu un hack (retour à NSString). Il est très probable que la bonne réponse à cela ait changé avec les différentes versions bêta.
Voici ce que j'utilise:
Le "! = Nil" est devenu obligatoire avec la version bêta 5.
la source
Vous voilà:
la source
Vous n'avez pas besoin d'écrire de code personnalisé pour cela. À partir de la version 1.2, Swift possède déjà toutes les méthodes dont vous avez besoin:
count(string)
;contains(string, substring)
;startsWith(string, substring)
la source
Dans Swift 3
la source
Voici! Prêt pour Xcode 8 et Swift 3.
la source
string.containsString n'est disponible que dans 10.10 Yosemite (et probablement iOS8). Le pontage vers ObjectiveC se bloque dans 10.9. Vous essayez de passer une NSString à NSCFString. Je ne connais pas la différence, mais je peux dire 10,9 barfs quand il exécute ce code dans une application OS X 10.9.
Voici les différences dans Swift avec 10.9 et 10.10: https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html containsString n'est disponible qu'en 10.10
La plage de chaînes ci-dessus fonctionne très bien sur 10.9. Je trouve que le développement sur 10.9 est super stable avec Xcode beta2. Je n'utilise pas les terrains de jeux ou la version en ligne de commande des terrains de jeux. Je trouve que si les cadres appropriés sont importés, la saisie semi-automatique est très utile.
la source
Avec et une nouvelle syntaxe dans swift 4, vous pouvez simplement
string.contains("Swift 4 is the best")
chaîne est votre variable chaîne
la source
Version Xcode 8 / Swift 3:
Vous pouvez également utiliser
contains
:la source
Vérifiez s'il contient «Bonjour»
la source
Swift 4 façons de vérifier les sous-chaînes, y compris l' importation de framework nécessaire
Foundation
(ouUIKit
):Sauf si
Foundation
(ouUIKit
) le framework est importé,str.contains("Can")
donnera une erreur de compilation.Cette réponse régurgite la réponse de manojlds , qui est tout à fait correcte. Je n'ai aucune idée pourquoi tant de réponses ont tant de mal à recréer
Foundation
laString.contains(subString: String)
méthode de.la source
la source
Swift 3: Ici, vous pouvez voir mon extension de recherche intelligente pour une chaîne qui vous permet de faire une recherche sur la chaîne pour voir si elle contient, ou peut-être pour filtrer une collection en fonction d'un texte de recherche.
https://github.com/magonicolas/Swift-Smart-String-Search
la source
Dans iOS 8 et versions ultérieures, vous pouvez utiliser ces deux
NSString
méthodes:la source
J'ai trouvé quelques cas d'utilisation intéressants. Ces variantes utilisent la méthode rangeOfString et j'inclus l'exemple d'égalité pour montrer comment utiliser au mieux les fonctionnalités de recherche et de comparaison des chaînes dans Swift 2.0
la source
Si vous voulez vérifier qu'une chaîne contient une autre sous-chaîne ou non, vous pouvez également la vérifier comme ceci,
Maintenant, dans cette chaîne particulière, si vous voulez savoir si elle contient ou non le nom du fruit, vous pouvez le faire,
J'espère que cela fonctionne pour toi.
la source
Vous pouvez simplement faire ce que vous avez mentionné:
De la documentation:
Vous devez
import Foundation
relier lesNSString
méthodes et les rendre disponibles à la classe String de Swift.la source
SWIFT 4 est très facile !!
la source
$ swift Welcome to Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1). Type :help for assistance. 1> print ("Ping") Ping 2> Print ("Ping") error: repl.swift:2:1: error: use of unresolved identifier 'Print' Print ("Ping") ^~~~~
En fournissant une réponse non testée qui ne fonctionne pas. Imprimer! = Imprimer.