Swift regex: ¿una cadena coincide con un patrón?

En Swift, ¿qué es una forma sencilla de ver si una cadena coincide con un patrón?

Ejemplos de pseudocódigos:

if string matches pattern ... if string =~ pattern ... 

(He leído los documentos Swift y no he visto una capacidad de expresión regular. He leído acerca de agregar un nuevo operador =~ , que es una buena idea, pero más compleja de lo que me gustaría, porque es para un proyecto de enseñanza. intenté rangeOfString pero rangeOfString el error: 'String' no tiene un miembro 'rangeOfString'. Estoy buscando una solución Swift, es decir, no escribo NSRegularExpression. No necesito hacer nada con los datos del resultado de la coincidencia).

Solución:

 import Foundation if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ... 

Ejemplo: ¿esta cadena contiene dos letras "o"?

 "hello world".rangeOfString("o.*o", options: .RegularExpressionSearch) != nil 

(Nota: import Foundation resuelve el post de error 'String' does not have a member 'rangeOfString' . Foundation proporciona los methods NSString que se puentean automáticamente a la class Swift String).

Para get la syntax en la que realmente pregunta, puede definir fácilmente un nuevo operador que envuelve la funcionalidad de NSString puenteada:

 infix operator =~ {} func =~(string:String, regex:String) -> Bool { return string.rangeOfString(regex, options: .RegularExpressionSearch) != nil } "abcd" =~ "ab*cd" "abcd" =~ "abcde+" 

Las soluciones mencionadas anteriormente ya no funcionaban para mí, así que estoy publicando mi solución aquí (utilicé una extensión para String):

 extension String { func matches(_ regex: String) -> Bool { return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil } } 

Ejemplo:

 if str.matches("^[a-zA-Z0-9._-]{1,30}$") { //... }