tipos datos characters swift nscharacterset

datos - swift string



¿Cómo puedo verificar si una cadena contiene letras en Swift? (3)

Estoy tratando de comprobar si una cadena específica contiene letras o no.

Hasta ahora me he encontrado con NSCharacterSet.letterCharacterSet() como un conjunto de letras, pero tengo problemas para comprobar si un carácter en ese conjunto está en la cadena dada. Cuando uso este código, recibo un error que dice:

''Personaje'' no es convertible a ''unichar''

Para el siguiente código:

for chr in input{ if letterSet.characterIsMember(chr){ return "Woah, chill out!" } }


Debe usar las funciones de rango integradas de NSCharacterSet con NSCharacterSet lugar de lanzar su propia solución. Esto también le dará mucha más flexibilidad (como una búsqueda que no distinga mayúsculas y minúsculas si así lo desea).

let str = "Hey this is a string" let characterSet = NSCharacterSet(charactersInString: "aeiou") if let _ = str.rangeOfCharacterFromSet(characterSet, options: .CaseInsensitiveSearch) { println("true") } else { println("false") }

Sustituye "aeiou" por las letras que estés buscando.

Una nota menos flexible, pero divertida a la vez que rápida, es que puedes usar cualquiera de las funciones disponibles para las Sequence . Así que puedes hacer esto:

contains("abc", "c")

Por supuesto, esto solo funcionará para caracteres individuales, y no es flexible y no se recomienda.


El problema con .characterIsMember es que toma un unichar (una tipografía para UInt16 ).

Si iteras tu entrada usando la vista utf16 de la cadena, funcionará:

let set = NSCharacterSet.letterCharacterSet() for chr in input.utf16 { if set.characterIsMember(chr) { println("/(chr) is a letter") } }

También puede omitir el bucle y usar el algoritmo de contenido si solo desea verificar la presencia / no presencia:

if contains(input.utf16, { set.characterIsMember($0) }) { println("contains letters") }


Puedes usar NSCharacterSet de la siguiente manera:

let letters = NSCharacterSet.letterCharacterSet() let phrase = "Test case" let range = phrase.rangeOfCharacterFromSet(letters) // range will be nil if no letters is found if let test = range { println("letters found") } else { println("letters not found") }

O también puedes hacer esto:

func containsOnlyLetters(input: String) -> Bool { for chr in input { if (!(chr >= "a" && chr <= "z") && !(chr >= "A" && chr <= "Z") ) { return false } } return true }

En Swift 2:

func containsOnlyLetters(input: String) -> Bool { for chr in input.characters { if (!(chr >= "a" && chr <= "z") && !(chr >= "A" && chr <= "Z") ) { return false } } return true }

Depende de usted, elegir una manera. Espero que esto te ayude.