Tracks
/
Swift
Swift
/
Ejercicios
/
La tienda de letreros personalizados de Cal
La tienda de letreros personalizados de Cal

La tienda de letreros personalizados de Cal

Ejercicio de aprendizaje

Introducción

Una cadena representa datos textuales. 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 grupo de grafemas extendido, es decir, un carácter legible por humanos compuesto por uno o más valores escalares de Unicode. Un valor escalar de Unicode es un punto de código de 21 bits en el rango de 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 un Character directamente a un String con + sin antes convertir el carácter a un string. Sin embargo, puedes usar el método append(_:) para agregar un string o un carácter directamente 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. Encierra cada expresión entre paréntesis precedidos por 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 strings y caracteres

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

Propiedades de los strings

Algunas propiedades comunes 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 comunes 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 a 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 Tabulación 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 vas a escribir código para ayudar a una empresa de letreros a crear mensajes personalizados para sus letreros.

1. Crea un conjunto de strings útiles

Define los siguientes strings constantes que se usarán para crear letreros:

  • 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 letreros:

  • 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 para quien es el letrero. Usa concatenación para construir el mensaje del letrero y recuerda reutilizar las constantes ya definidas. La función debe devolver el mensaje del letrero como un string.

buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"

buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"

4. Construye un letrero 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 para quien es el letrero, y el argumento year, que es un entero que contiene el año en que se gradúa la persona. Usa strings de plantilla para construir el mensaje del letrero. La función debe devolver el mensaje del letrero como un string.

graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"

5. Calcula el costo de un letrero

Implementa la función costOf(sign:), que recibe el argumento sign, que es un string que contiene el mensaje del letrero. El letrero tiene un precio base de 20 en la moneda dada. Además, cada letra cuesta 2 (los espacios en blanco se incluyen en el cálculo). La función debe devolver el costo del letrero como un entero.

costOf(sign: "Happy Birthday Grandma!")
// returns 66
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Swift Exercism

¿Todo listo para empezar La tienda de letreros personalizados de Cal?

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