¿Existe tal cosa como un método beginWith () o algo similar en Swift?
Básicamente estoy tratando de verificar si cierta cadena comienza con otra cadena. También quiero que no distinga entre mayúsculas y minúsculas.
Como puede notar, solo estoy tratando de hacer una función de búsqueda simple, pero parece que estoy fallando miserablemente en esto.
Esto es lo que me gustaría:
escribir "sa" debería darme resultados para "San Antonio", "Santa Fe", etc. escribir "SA" o "Sa" o incluso "sA" también debería devolver "San Antonio" o "Santa Fe".
Yo estaba usando
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
antes de iOS9 y funcionaba bien. Sin embargo, después de actualizar a iOS9, dejó de funcionar y ahora las búsquedas distinguen entre mayúsculas y minúsculas.
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 ");
}
Respuestas:
usar en
hasPrefix
lugar destartsWith
.Ejemplo:
fuente
"string".lowercased()
Aquí hay una implementación de extensión Swift de comienza con:
Ejemplo de uso:
fuente
Para responder específicamente la coincidencia de prefijos sin distinción entre mayúsculas y minúsculas :
en Swift puro (recomendado la mayor parte del tiempo)
o:
nota: para un prefijo vacío,
""
ambas implementaciones devolverántrue
usando Foundation
range(of:options:)
nota: para un prefijo vacío
""
devolveráfalse
y ser feo con una expresión regular (lo he visto ...)
nota: para un prefijo vacío
""
devolveráfalse
fuente
En Swift 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Element
se presentará.Ejemplo de uso:
fuente
Editar: actualizado para Swift 3.
La clase Swift String tiene un método
hasPrefix()
que distingue entre mayúsculas y minúsculas, pero si desea una búsqueda que no distinga entre mayúsculas y minúsculas, puede usar el método NSStringrange(of:options:)
.Nota: Por defecto, los métodos NSString no están disponibles, pero si
import Foundation
lo están.Entonces:
Las opciones se pueden dar como
.caseInsensitive
o[.caseInsensitive]
. Usaría el segundo si quisiera usar opciones adicionales, como:Este enfoque también tiene la ventaja de poder utilizar otras opciones con la búsqueda, como las
.diacriticInsensitive
búsquedas. El mismo resultado no se puede lograr simplemente usando. lowercased()
las cadenas.fuente
Versión Swift 3:
fuente
.anchored
. Vea mi respuesta o la respuesta de Oliver Atkinson.En Swift 4 con extensiones
Mi extensión-ejemplo contiene 3 funciones: marcar hacer un String que comience con una subString, hacer un String end a un subString y hacer un String que contenga un subString.
Establezca el parámetro isCaseSensitive en false, si desea ignorar los caracteres "A" o "a", de lo contrario, configúrelo en true.
Vea los comentarios en el código para obtener más información sobre cómo funciona.
Código:
Ejemplos de uso:
Para verificar, la cadena comienza con "TEST":
Para verificar, la Cadena comienza con "prueba":
Para comprobar, finalice la cadena con "G123":
Para comprobar, finalice la cadena con "g123":
Para verificar, la cadena contiene "RING12":
Para verificar, la cadena contiene "ring12":
fuente