Un string representa datos de texto.
En Swift, un String es una colección ordenada de valores Character, donde cada carácter representa un carácter Unicode.
Creas un string con un literal de string, que es una secuencia de caracteres rodeada de comillas dobles (").
Para strings de varias líneas, usa tres comillas dobles ("""):
let hello: String = "Hello, World!"
let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""
Los strings de Swift se integran a la perfección con la clase NSString del framework Foundation, lo que da acceso a amplias capacidades de procesamiento de texto.
Un Character representa un único clúster de grafemas extendido, es decir, un carácter legible por humanos compuesto por uno o más valores escalares Unicode.
Un valor escalar Unicode es un punto de código de 21 bits en el rango U+0000 a U+D7FF inclusive, o de U+E000 a U+10FFFF inclusive.
let aChar: Character = "A"
Cuando escribes un literal de string, Swift infiere automáticamente que su tipo es String.
Para guardar un solo carácter como Character, debes indicar una anotación de tipo explícita:
let aString = "A" // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar)) // Prints Character
// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'
Puedes unir strings con el operador de suma (+):
print("honey" + "comb")
// Prints "honeycomb"
No puedes concatenar directamente un Character a un String con + sin convertir antes el carácter en un string.
Sin embargo, puedes usar el método append(_:) para añadir directamente un string o un carácter a un string mutable:
var greeting = "Hello"
let world = ", world"
let period: Character = "."
greeting.append(world)
print(greeting) // Prints "Hello, world"
greeting.append(period)
print(greeting) // Prints "Hello, world."
La interpolación de strings te permite construir un string insertando constantes, variables, literales y expresiones dentro de literales de string.
Escribe cada expresión entre paréntesis precedidos de una barra invertida (\( ... )):
let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"
Los strings y los caracteres ofrecen varias propiedades para inspeccionar su contenido.
Algunas propiedades habituales de los strings son:
| Propiedad | Descripción | Ejemplo |
|---|---|---|
isEmpty |
Devuelve true si el string no tiene caracteres |
"Hello".isEmpty se evalúa como false
|
count |
Devuelve el número de caracteres del string |
"Hello".count se evalúa como 5
|
Para ver una lista completa de propiedades, consulta la documentación de String de Apple.
Algunas propiedades habituales de los caracteres son:
| Propiedad | Descripción | Ejemplo |
|---|---|---|
isLowercase |
Devuelve true si el carácter está en minúscula |
"a".isLowercase se evalúa como true
|
isUppercase |
Devuelve true si el carácter está en mayúscula |
"A".isUppercase se evalúa como true
|
isNumber |
Devuelve true si el carácter es un dígito |
"1".isNumber se evalúa como true
|
isWhitespace |
Devuelve true si el carácter es un espacio en blanco |
" ".isWhitespace se evalúa como true
|
Para ver una lista completa de propiedades, consulta la documentación de Character de Apple.
Puedes convertir otros tipos en strings usando el inicializador String(_:), que admite tipos estándar como Int, Double y Character:
let charX: Character = "x"
print(String(charX)) // Prints "x"
print(String(110)) // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"
Los literales de string de Swift admiten varias secuencias de escape para caracteres especiales:
| Secuencia | Descripción |
|---|---|
\0 |
Carácter nulo |
\\ |
Barra invertida |
\t |
Tabulador horizontal |
\n |
Salto de línea (nueva línea) |
\r |
Retorno de carro |
\' |
Comilla simple |
\" |
Comilla doble |
\u{n} |
Escalar Unicode arbitrario (hexadecimal) |
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.
let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖
En este ejercicio escribirás código para ayudar a una empresa de carteles a crear mensajes personalizados para sus carteles.
Define los siguientes strings constantes que se usarán para crear carteles:
birthday: contiene el valor "Birthday"valentine: contiene el valor "Valentine's Day"anniversary: contiene el string "Anniversary"Define los siguientes caracteres constantes que se usarán para crear carteles:
space: contiene el valor " " (un solo espacio)exclamation: contiene el valor "!"Implementa la función buildSign(for:name:), que recibe el argumento for, que contiene uno de los tres strings que definiste en la primera tarea, y el argumento name, que es un string que contiene el nombre de la persona a la que va dirigido el cartel.
Usa concatenación para construir el mensaje del cartel y recuerda reutilizar las constantes ya definidas.
La función debe devolver el mensaje del cartel como un string.
buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"
buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"
Implementa la función graduationFor(name:year:), que recibe el argumento name, que es un string que contiene el nombre de la persona a la que va dirigido el cartel, y el argumento year, que es un número entero que contiene el año en el que se gradúa la persona.
Usa plantillas de string para construir el mensaje del cartel.
La función debe devolver el mensaje del cartel como un string.
graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"
Implementa la función costOf(sign:), que recibe el argumento sign, que es un string que contiene el mensaje del cartel.
El cartel tiene un precio base de 20 en la moneda indicada. Además, cada letra cuesta 2 (los espacios en blanco se incluyen en el cálculo).
La función debe devolver el coste del cartel como un número entero.
costOf(sign: "Happy Birthday Grandma!")
// returns 66
Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.