Cómo capitalizar cada palabra en una cadena usando Swift iOS

¿Hay una función para capitalizar cada palabra en una cadena o es un proceso manual?

Por ejemplo, “bob es alto” Y me gustaría que “Bob sea alto”

Seguramente hay algo y ninguna de las respuestas de Swift IOS que he encontrado parecía cubrir esto.

¿Estás buscando capitalizedString

Discusión
Una cadena con el primer carácter de cada palabra cambia a su valor en mayúscula correspondiente, y todos los caracteres restantes se establecen en sus valores minúsculos correspondientes.

y / o capitalizedStringWithLocale(_:)

Devuelve una representación en mayúscula del receptor utilizando la configuración regional especificada.

Para las cadenas presentadas a los usuarios, pase la configuración regional actual ([NSLocale currentLocale]). Para usar la configuración regional del sistema, pase nil.

Desde iOS 9 está disponible una función de capitalización localizada ya que las letras mayúsculas pueden diferir en idiomas.

 if #available(iOS 9.0, *) { "istanbul".localizedCapitalizedString // In Turkish: "İstanbul" } 

Un ejemplo de la respuesta proporcionada anteriormente.

  var sentenceToCap = "this is a sentence." println(sentenceToCap.capitalizedStringWithLocale(NSLocale.currentLocale()) ) 

El resultado final es una cadena “This Is A Sentence”

Para Swift 3 ha sido cambiado a capitalized .

Discusión
Esta propiedad realiza el mapeo canónico (no localizado). Es adecuado para progtwigr operaciones que requieren resultados estables que no dependen de la configuración regional actual. Una cadena en mayúscula es una cadena con el primer carácter de cada palabra cambiado a su valor en mayúscula correspondiente, y todos los caracteres restantes se establecen en sus correspondientes valores en minúscula. Una “palabra” es cualquier secuencia de caracteres delimitada por espacios, tabs o terminadores de línea (enumerados en getLineStart (_: end: contentsEnd: for :)). No se considera una puntuación de delimitación de palabras comunes, por lo que esta propiedad no suele producir los resultados deseados para cadenas de múltiples palabras. No se garantiza que las transformaciones de caso sean simétricas ni que produzcan cadenas de la misma longitud que los originales. Consulte minúsculas para ver un ejemplo.

Swift 3:

 var lowercased = "hello there" var stringCapitalized = lowercased.capitalized //prints: "Hello There" 

Hay una función incorporada para eso

 nameOfString.capitalizedString 

Esto capitalizará cada palabra de cadena. Para poner en mayúscula solo la primera letra que puede usar:

 nameOfString.replaceRange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalizedString) 

Hilo más viejo

Esto es lo que se me ocurrió que parece funcionar, pero estoy abierto a cualquier cosa que sea mejor.

  func firstCharacterUpperCase(sentenceToCap:String) -> String { //break it into an array by delimiting the sentence using a space var breakupSentence = sentenceToCap.componentsSeparatedByString(" ") var newSentence = "" //Loop the array and concatinate the capitalized word into a variable. for wordInSentence in breakupSentence { newSentence = "\(newSentence) \(wordInSentence.capitalizedString)" } // send it back up. return newSentence } 

o si quiero usar esto como una extensión de la clase de cadena.

 extension String { var capitalizeEachWord:String { //break it into an array by delimiting the sentence using a space var breakupSentence = self.componentsSeparatedByString(" ") var newSentence = "" //Loop the array and concatinate the capitalized word into a variable. for wordInSentence in breakupSentence { newSentence = "\(newSentence) \(wordInSentence.capitalizedString)" } // send it back up. return newSentence } } 

De nuevo, cualquier cosa mejor es bienvenida.