¿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
hasPrefixlugar 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ántrueusando Foundation
range(of:options:)nota: para un prefijo vacío
""devolveráfalsey ser feo con una expresión regular (lo he visto ...)
nota: para un prefijo vacío
""devolveráfalsefuente
En Swift 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Elementse 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 Foundationlo están.Entonces:
Las opciones se pueden dar como
.caseInsensitiveo[.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
.diacriticInsensitivebú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