En Objective-C
el código para verificar una subcadena en un NSString
es:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
Pero, ¿cómo hago esto en Swift?
Respuestas:
Puede hacer exactamente la misma llamada con Swift:
Swift 4 y Swift 5
En Swift 4 String hay una colección de
Character
valores, no era así en Swift 2 y 3, por lo que puede usar este código más conciso 1 :Swift 3.0+
Swift mayor
Espero que esta sea una solución útil ya que algunas personas, incluyéndome a mí, encontraron algunos problemas extraños al llamar
containsString()
. 1PD. No te olvides de
import Foundation
Notas al pie
fuente
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 (@"").
Entonces, tal vez la comprobaciónnil
no funcione correctamente.{NSNotFound, 0}
está representado para usted como nulo. Si se trata de un rango real, se representa para usted como un Rango rápido (opcional). Frio.NSString
's.rangeOfString()
. Esto es llamadoString
's.rangeOfString()
, que se declara comofunc rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
Forma de extensión
Swift 4
En general, Swift 4 tiene un método que contiene , sin embargo, está disponible desde iOS 8.0+
Swift 3.1
Puede escribir extensión
contains:
ycontainsIgnoringCase
paraString
Versión Swift anterior
Ejemplo:
fuente
Foundation
alrededor ...containsString
funciona bien.De los documentos, parece que invocar
containsString()
una cadena debería funcionar:Sin embargo, no parece funcionar de esa manera.
Si intenta utilizar
someString.containsString(anotherString)
, obtendrá un error de tiempo de compilación que indica'String' does not contain a member named 'containsString'
.Por lo tanto, le quedan algunas opciones, una de las cuales es unir explícitamente su
String
objetivo con Objective-C mediante el uso debridgeToObjectiveC()
otros dos que implican explícitamente el uso deNSString
y el último implica lanzar elString
a unNSString
Al hacer un puente, obtendría:
Al escribir explícitamente la cadena como un
NSString
, obtendría:Si tiene un existente
String
, puede inicializar un NSString a partir de él utilizando NSString (string :):Y, por último, puede emitir un existente
String
a un de laNSString
siguiente manerafuente
[__NSCFString containsString:]: unrecognized selector sent to instance
. Además, no puedo encontrar el métodocontainsString
en los documentos de desarrollo para confirmar si es nuevo para iOS 8.Otro. Admite mayúsculas y opciones diacríticas.
Swift 3.0
Uso
iOS 9+
Función insensible a mayúsculas y diacríticas disponible desde iOS 9.
fuente
A partir de Xcode 7.1 y Swift 2.1
containsString()
está funcionando bien para mí.Swift 4:
Y un ejemplo de Swift 4 que no distingue entre mayúsculas y minúsculas:
O usando una
String
extensión que no distingue entre mayúsculas y minúsculas :fuente
import Foundation
, de lo contrario esto no funcionará.import UIKit
de los dosimport Foundation
es obligatorio, al menos con iOS 11 y Swift 4.En Swift 4.2
Utilizar
Ejemplo
fuente
> EN SWIFT 3.0
Salida
fuente
Puedes hacer esto muy fácilmente en Swift usando el código:
fuente
Solo una adición a las respuestas aquí.
También puede hacer una prueba local sin distinción entre mayúsculas y minúsculas utilizando:
Ejemplo:
ACTUALIZAR
Esto es parte de Foundation Framework para iOS y Mac OS X 10.10.x y era parte de 10.10 en el momento de mi publicación original.
fuente
Aquí está mi primera puñalada en el patio de juegos rápido. Extiendo String proporcionando dos nuevas funciones (contiene y contieneIgnoreCase)
Úselo así
Agradecería cualquier comentario :)
fuente
De todas las respuestas aquí, creo que o bien no funcionan, o son un poco hack (regresando a NSString). Es muy probable que la respuesta correcta a esto haya cambiado con las diferentes versiones beta.
Esto es lo que uso:
El "! = Nil" se requirió con Beta 5.
fuente
Aquí estás:
fuente
No necesita escribir ningún código personalizado para esto. A partir de la versión 1.2, Swift ya ha tenido todos los métodos que necesita:
count(string)
;contains(string, substring)
;startsWith(string, substring)
fuente
En Swift 3
fuente
¡Aqui tienes! Listo para Xcode 8 y Swift 3.
fuente
string.containsString solo está disponible en 10.10 Yosemite (y probablemente iOS8). También lo conecta a ObjectiveC se bloquea en 10.9. Estás intentando pasar un NSString a NSCFString. No sé la diferencia, pero puedo decir 10.9 barfs cuando ejecuta este código en una aplicación OS X 10.9.
Estas son las diferencias en Swift con 10.9 y 10.10: https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html contieneString solo está disponible en 10.10
Range of String anterior funciona muy bien en 10.9. Estoy descubriendo que el desarrollo en 10.9 es súper estable con Xcode beta2. No uso los parques infantiles ni la versión de línea de comandos de los parques infantiles. Estoy descubriendo que si se importan los marcos adecuados, el autocompletado es muy útil.
fuente
Con y una nueva sintaxis en swift 4 puedes simplemente
string.contains("Swift 4 is the best")
cadena es su variable de cadena
fuente
Versión Xcode 8 / Swift 3:
También puedes usar
contains
:fuente
Comprueba si contiene 'Hola'
fuente
4 formas rápidas de verificar las subcadenas, incluida la importación de marco necesaria
Foundation
(oUIKit
):A menos que se importe
Foundation
(oUIKit
) el marco,str.contains("Can")
dará un error del compilador.Esta respuesta es regurgitar la respuesta de manojlds , que es completamente correcta. No tengo idea de por qué tantas respuestas pasan por tantos problemas para recrear
Foundation
elString.contains(subString: String)
método.fuente
fuente
Swift 3: aquí puede ver mi extensión de búsqueda inteligente de cadena que le permite realizar una búsqueda en la cadena para ver si contiene, o tal vez para filtrar una colección basada en un texto de búsqueda.
https://github.com/magonicolas/Swift-Smart-String-Search
fuente
En iOS 8 y versiones posteriores, puede usar estos dos
NSString
métodos:fuente
He encontrado un par de casos de uso interesantes. Estas variantes hacen uso del método rangeOfString e incluyo el ejemplo de igualdad para mostrar cómo uno puede usar mejor las funciones de búsqueda y comparación de Strings en Swift 2.0
fuente
Si desea verificar que una Cadena contenga otra Subcadena dentro o no, también puede verificarla así,
Ahora, en esta cadena en particular, si desea saber si contiene el nombre de fruta 'manzana' o no, puede hacerlo,
Espero que esto funcione para usted.
fuente
Puedes hacer lo que has mencionado:
De los documentos:
Debe
import Foundation
unir losNSString
métodos y ponerlos a disposición de la clase String de Swift.fuente
¡SWIFT 4 es muy fácil!
fuente
$ 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") ^~~~~
Al proporcionar una respuesta no probada que no funciona. Imprimir! = Imprimir.