Rutas
/
Swift
Swift
/
Ejercicios
/
La tienda de carteles personalizados de Cal
La tienda de carteles personalizados de Cal

La tienda de carteles personalizados de Cal

Ejercicio de aprendizaje

Introducción

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.

Caracteres

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"

Inferencia de tipos

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'

Concatenación

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."

Interpolación de strings

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"

Propiedades de los strings y los caracteres

Los strings y los caracteres ofrecen varias propiedades para inspeccionar su contenido.

Propiedades de los strings

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.

Propiedades de los caracteres

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.

Conversión de tipos

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"

Caracteres especiales

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 💖

Instrucciones

En este ejercicio escribirás código para ayudar a una empresa de carteles a crear mensajes personalizados para sus carteles.

1. Crea un conjunto de strings útiles

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"

2. Crea un conjunto de caracteres útiles

Define los siguientes caracteres constantes que se usarán para crear carteles:

  • space: contiene el valor " " (un solo espacio)
  • exclamation: contiene el valor "!"

3. Combina frases para construir mensajes

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!"

4. Crea un cartel de graduación

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"

5. Calcula el coste de un cartel

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
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Swift Exercism

¿Listo para empezar La tienda de carteles personalizados de Cal?

Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.