Trilhas
/
Swift
Swift
/
Exercícios
/
A Loja de Letreiros Personalizados do Cal
A Loja de Letreiros Personalizados do Cal

A Loja de Letreiros Personalizados do Cal

Exercício de aprendizagem

Introdução

Uma string representa dados textuais. Em Swift, uma String é uma coleção ordenada de valores Character, em que cada caractere representa um caractere Unicode.

Você cria uma string usando um literal de string, que é uma sequência de caracteres cercada por aspas duplas ("). Para strings de várias linhas, use três aspas duplas ("""):

let hello: String = "Hello, World!"

let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""

As strings do Swift se conectam de forma transparente com a classe NSString do framework Foundation, dando acesso a amplos recursos de processamento de texto.

Caracteres

Um Character representa um único cluster de grafemas estendido, um caractere legível por humanos composto de um ou mais valores escalares Unicode. Um valor escalar Unicode é um ponto de código de 21 bits no intervalo de U+0000 a U+D7FF, inclusive, ou de U+E000 a U+10FFFF, inclusive.

let aChar: Character = "A"

Inferência de tipos

Quando você escreve um literal de string, o Swift infere automaticamente que o tipo dele é String. Para armazenar um único caractere como Character, você precisa fornecer uma anotação 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'

Concatenação

Você pode juntar strings usando o operador de adição (+):

print("honey" + "comb")
// Prints "honeycomb"

Você não pode concatenar um Character diretamente a uma String usando + sem antes converter o caractere em uma string. No entanto, você pode usar o método append(_:) para acrescentar uma string ou um caractere diretamente a uma string mutável:

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

Interpolação de strings

A interpolação de strings permite construir uma string embutindo constantes, variáveis, literais e expressões dentro de literais de string. Coloque cada expressão entre parênteses precedidos por uma 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"

Propriedades de strings e caracteres

Strings e caracteres oferecem várias propriedades para inspecionar seu conteúdo.

Propriedades de strings

As propriedades de string mais comuns incluem:

Propriedade Descrição Exemplo
isEmpty Retorna true se a string não tiver caracteres "Hello".isEmpty resulta em false
count Retorna o número de caracteres na string "Hello".count resulta em 5

Para uma lista completa de propriedades, consulte a documentação de String da Apple.

Propriedades de caracteres

As propriedades de caractere mais comuns incluem:

Propriedade Descrição Exemplo
isLowercase Retorna true se o caractere for minúsculo "a".isLowercase resulta em true
isUppercase Retorna true se o caractere for maiúsculo "A".isUppercase resulta em true
isNumber Retorna true se o caractere for um dígito "1".isNumber resulta em true
isWhitespace Retorna true se o caractere for um espaço em branco " ".isWhitespace resulta em true

Para uma lista completa de propriedades, consulte a documentação de Character da Apple.

Conversão de tipos

Você pode converter outros tipos em strings usando o inicializador String(_:), que dá suporte a tipos padrão como Int, Double e Character:

let charX: Character = "x"
print(String(charX))     // Prints "x"
print(String(110))       // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"

Caracteres especiais

Literais de string do Swift dão suporte a várias sequências de escape para caracteres especiais:

Sequência Descrição
\0 Caractere nulo
\\ Barra invertida
\t Tabulação horizontal
\n Avanço de linha (nova linha)
\r Retorno de carro
\' Aspas simples
\" Aspas duplas
\u{n} Escalar Unicode arbitrário (hexadecimal)
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.

let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖

Instruções

Neste exercício, você vai escrever código para ajudar uma empresa de placas a criar mensagens personalizadas para suas placas.

1. Crie um conjunto de strings úteis

Defina as seguintes strings constantes que serão usadas para criar placas:

  • birthday: guarda o valor "Birthday"
  • valentine: guarda o valor "Valentine's Day"
  • anniversary: guarda a string "Anniversary"

2. Crie um conjunto de caracteres úteis

Defina os seguintes caracteres constantes que serão usados para criar placas:

  • space: guarda o valor " " (um único espaço)
  • exclamation: guarda o valor "!"

3. Combine frases para montar mensagens

Implemente a função buildSign(for:name:), que recebe o argumento for, que guarda uma das três strings definidas na primeira tarefa, e o argumento name, que é uma string que guarda o nome da pessoa para quem a placa é destinada. Você deve usar concatenação para montar a mensagem da placa e lembre-se de reutilizar as constantes já definidas. A função deve retornar a mensagem da placa como uma string.

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

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

4. Crie uma placa de formatura

Implemente a função graduationFor(name:year:), que recebe o argumento name, que é uma string que guarda o nome da pessoa para quem a placa é destinada, e o argumento year, que é um inteiro que guarda o ano em que a pessoa se forma. Você deve usar template strings para montar a mensagem da placa. A função deve retornar a mensagem da placa como uma string.

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

5. Calcule o custo de uma placa

Implemente a função costOf(sign:), que recebe o argumento sign, que é uma string que guarda a mensagem da placa. A placa tem um preço base de 20 na moeda em questão. Além disso, cada letra custa 2 (os espaços em branco entram no cálculo). A função deve retornar o custo da placa como um inteiro.

costOf(sign: "Happy Birthday Grandma!")
// returns 66
Editar via GitHub O link abre em uma nova janela ou aba
Swift Exercism

Tudo pronto para começar A Loja de Letreiros Personalizados do Cal?

Crie sua conta no Exercism para aprender e dominar Swift com 35 conceitos116 exercícios e mentoria humana de verdade, tudo de graça.