Swift: Strings e Caracteres do Swift
Strings são o tipo de dado mais usado no desenvolvimento diário. Esta lição oferece um tour completo pelas operações de String e Character no Swift.
1. O Que Você Vai Aprender
- Criar, concatenar e comparar Strings
- Sintaxe de interpolação de string e saída formatada
- Regras de indentação de string multilinha
- O tipo Character e iteração sobre strings
- Métodos comuns de string: count, hasPrefix, uppercased e mais
2. Uma História Real: Um Especialista em Operações com Clientes
(1) O Problema: A Concatenação Manual de Templates de Email Era Lenta e Propensa a Erros
Charlie é especialista em operações com clientes em uma empresa SaaS, enviando emails personalizados para mais de 2.000 clientes toda semana. Ele começou usando sinais de mais para concatenar strings:
let firstName = "Alice"
let lastName = "Johnson"
let product = "Premium Plan"
let price = "299.00"
let email = "Dear " + firstName + " " + lastName + ",\n\nThank you for purchasing " + product + "!\nYour payment: $" + price + ".\n\nBest regards,\nCharlie"
O código era longo e difícil de manter. Qualquer mudança no formato do template significava reescrever tudo. Na semana passada, ele acidentalmente enviou "Prezado(a) AliceJohnson" (faltando um espaço) para mais de 300 clientes.
(2) A Solução: Interpolação de String
Charlie mudou para a sintaxe de interpolação de string do Swift, e o template ficou limpo e legível:
let firstName = "Alice"
let lastName = "Johnson"
let product = "Premium Plan"
let price = "299.00"
let email = """
Dear \(firstName) \(lastName),
Thank you for purchasing \(product)!
Your payment: $\(price).
Best regards,
Charlie
"""
print(email)
Saída:
TEXT 📖 Somente leituraPrezado(a) Alice Johnson, Obrigado por adquirir o Plano Premium! Seu pagamento: R$299.00. Atenciosamente, Charlie
(3) O Resultado: A Manutenibilidade do Código do Template Melhorou
| Dimensão | Antes (Concatenação) | Depois (Interpolação) |
|---|---|---|
| Código por email | 8 linhas de concatenação + escape | 4 linhas de interpolação |
| Tempo de edição do template | 5-10 minutos | 30 segundos |
| Taxa de erro | 3-5 por mês | 0 |
| Legibilidade | Símbolos misturados, extremamente difícil de revisar | Quase texto simples |
3. Criando e Concatenando Strings
O tipo String do Swift é poderoso e oferece várias maneiras de criar e manipular strings.
(1) Literais de String
Crie strings envolvendo texto em aspas duplas. O Swift suporta Unicode, incluindo emojis:
let greeting = "Hello, Swift!"
let empty = "" // Empty string
let emoji = "🚀" // Unicode support
| Método de Criação | Sintaxe | Descrição |
|---|---|---|
| Literal | let s = "Olá" |
Mais comum |
| String vazia | let s = "" |
String vazia |
| Inicializador | String() |
Cria uma string vazia |
| Repetição | String(repeating: "!", count: 3) |
"!!!" |
graph LR
A[Criação de String] --> B["Literal: \"Olá\""]
A --> C["Inicializador: String()"]
A --> D["Repetição: repeating count"]
A --> E["Concatenação: +"]
A --> F["Interpolação: \\(valor)"]
(2) Concatenação de String
Use + ou += para concatenar strings, ou o método append:
let firstName = "Alice"
let lastName = "Johnson"
// Using + for concatenation
let fullName = firstName + " " + lastName
print(fullName) // Alice Johnson
// Using += to append
var message = "Hello"
message += ", "
message += firstName
print(message) // Hello, Alice
// Using the append method
var greeting2 = "Welcome"
greeting2.append("!")
print(greeting2) // Welcome!
▶ Exemplo: Gerador de Endereços de Email
// ============================================
// Generate email addresses from user info
// Demonstrates string creation and concatenation
// ============================================
let domain = "@example.com"
let alice = "alice.johnson"
let bob = "bob.smith"
let charlie = "charlie.brown"
let email1 = alice + domain
let email2 = bob + domain
let email3 = charlie + domain
print(email1)
print(email2)
print(email3)
// Build a full URL
let scheme = "https://"
let site = "api."
let fullURL = scheme + site + domain
print("API URL: \(fullURL)")
Saída:
TEXT 📖 Somente leituraalice.johnson@example.com bob.smith@example.com charlie.brown@example.com API URL: https://api.example.com
4. Interpolação de String e Métodos Comuns
A interpolação de string é um dos recursos de string mais poderosos do Swift, permitindo incorporar variáveis, expressões e até chamadas de função diretamente em strings.
(1) Interpolação de String
Use a sintaxe \(expressao) para incorporar qualquer valor em uma string:
let name = "Alice"
let age = 28
let height = 1.75
let intro = "My name is \(name), I am \(age) years old and \(height) meters tall."
print(intro)
// My name is Alice, I am 28 years old and 1.75 meters tall.
// Expressions inside interpolation
let price = 29.99
let qty = 3
let summary = "Total: $\(price * Double(qty))"
print(summary)
// Total: $89.97
| Conteúdo da Interpolação | Sintaxe | Resultado |
|---|---|---|
| Variável | \(nome) |
O valor da variável |
| Expressão | \(preco * 0.9) |
Resultado calculado |
| Chamada de método | \(nome.uppercased()) |
Valor de retorno do método |
| Múltiplos valores | \(a) + \(b) = \(a + b) |
Incorporados um por um |
(2) Métodos Comuns de String
A String do Swift fornece um rico conjunto de métodos embutidos:
let text = "Hello, Swift!"
text.count // 13 (character count)
text.isEmpty // false
text.hasPrefix("Hello") // true
text.hasSuffix("Swift!") // true
text.uppercased() // "HELLO, SWIFT!"
text.lowercased() // "hello, swift!"
text.contains("Swift") // true
| Método | O Que Faz | Exemplo | Resultado |
|---|---|---|---|
count |
Número de caracteres | "Olá".count |
3 |
isEmpty |
Se está vazia | "".isEmpty |
true |
hasPrefix |
Se começa com um prefixo | "Swift".hasPrefix("Sw") |
true |
hasSuffix |
Se termina com um sufixo | "Swift".hasSuffix("ft") |
true |
uppercased |
Converte para maiúsculas | "Swift".uppercased() |
"SWIFT" |
lowercased |
Converte para minúsculas | "Swift".lowercased() |
"swift" |
contains |
Se contém uma substring | "Olá".contains("lá") |
true |
▶ Exemplo: Cartão de Informações do Usuário
// ============================================
// Generate a formatted user info card
// Demonstrates string interpolation and common methods
// ============================================
let firstName = "Alice"
let lastName = "Johnson"
let email = "alice.johnson@example.com"
let role = "Admin"
// Use interpolation to combine info
let displayName = "\(firstName) \(lastName)"
let emailDomain = email.contains("@") ? email.split(separator: "@")[1] : "unknown"
// Validate format
let isValidEmail = email.contains(".") && email.contains("@")
let isAdmin = role.uppercased() == "ADMIN"
print("=== User Card ===")
print("Name: \(displayName)")
print("Email: \(email)")
print("Domain: \(emailDomain)")
print("Valid Email: \(isValidEmail)")
print("Admin: \(isAdmin)")
print("Name Length: \(displayName.count) chars")
Saída:
TEXT 📖 Somente leitura=== User Card === Name: Alice Johnson Email: alice.johnson@example.com Domain: example.com Valid Email: true Admin: true Name Length: 13 chars
5. Strings Multilinha e Character
O Swift fornece sintaxe de aspas triplas para strings multilinha, e o tipo Character representa um único caractere.
(1) Strings Multilinha
Use três aspas duplas """ para envolver o conteúdo, preservando quebras de linha e indentação:
let poem = """
Roses are red,
Violets are blue,
Swift is awesome,
And so are you!
"""
print(poem)
Saída:
TEXT 📖 Somente leituraRoses are red, Violets are blue, Swift is awesome, And so are you!
Regras de indentação para strings multilinha: a posição do """ de fechamento determina quantos espaços em branco iniciais são removidos de cada linha:
let indented = """
Line 1
Line 2
"""
// The 4 leading spaces on each line are stripped
| Característica | String de Linha Única | String Multilinha |
|---|---|---|
| Sintaxe | "..." |
"""...""" |
| Quebras de linha | Deve escrever \n |
Quebras de linha diretas |
| Aspas | Deve escapar \" |
Pode escrever " diretamente |
| Indentação | Nenhuma | Baseada no delimitador de fechamento |
(2) O Tipo Character
Um Character representa um único caractere visível (escalar Unicode). Uma string é composta por múltiplos Characters:
let ch: Character = "A"
let emoji: Character = "🌟"
// Iterate over each character in a string
let greeting = "Hi!"
for char in greeting {
print(char)
}
// Output: H i !
▶ Exemplo: Formatação de Texto
// ============================================
// Generate a formatted product description
// Demonstrates multiline strings and Character iteration
// ============================================
let productName = "Swift Pro"
let version = "2.0"
let features = ["Fast", "Safe", "Modern", "Open Source"]
// Use a multiline string to build the product description
let description = """
Product: \(productName)
Version: \(version)
Features:
- \(features[0])
- \(features[1])
- \(features[2])
- \(features[3])
"""
print(description)
// Iterate over each character in the product name
print("Product name characters:")
for ch in productName {
print("[\(ch)]", terminator: " ")
}
print()
Saída:
TEXT 📖 Somente leituraProduct: Swift Pro Version: 2.0 Features: - Fast - Safe - Modern - Open Source Product name characters: [S] [w] [i] [f] [t] [ ] [P] [r] [o]
6. Exemplo Completo: Gerador de Email para Clientes
// ============================================
// Customer email generator
// Demonstrates concatenation, interpolation, multiline, and methods
// ============================================
import Foundation
// 1. Customer data
let customerName = "Charlie Brown"
let projectName = "DataSync Pro"
let dueDate = "2026-08-15"
let amount = 2499.00
// 2. Email subject
let subject = "Invoice for \(projectName) - Due \(dueDate)"
print("Subject: \(subject)")
print(String(repeating: "=", count: subject.count + 10))
// 3. Email body (multiline string + interpolation)
let body = """
Dear \(customerName),
Thank you for choosing \(projectName).
Invoice Summary:
- Project: \(projectName)
- Amount: $\(String(format: "%.2f", amount))
- Due Date: \(dueDate)
Please make the payment by \(dueDate).
If you have any questions, feel free to reply.
Best regards,
Swift Tech Team
"""
print(body)
// 4. Email validation
let isValidSubject = subject.hasPrefix("Invoice")
let containsProjectName = body.contains(projectName)
let isFormatted = body.hasSuffix("Team\n")
print("=== Validation ===")
print("Valid Subject: \(isValidSubject)")
print("Contains Project: \(containsProjectName)")
print("Proper Formatting: \(isFormatted)")
print("Body Length: \(body.count) chars")
Saída:
TEXT 📖 Somente leituraAssunto: Fatura para DataSync Pro - Vencimento 2026-08-15 ============================================== Prezado(a) Charlie Brown, Obrigado por escolher o DataSync Pro. Resumo da Fatura: - Projeto: DataSync Pro - Valor: R$2499.00 - Data de Vencimento: 2026-08-15 Por favor, efetue o pagamento até 2026-08-15. Se tiver alguma dúvida, fique à vontade para responder. Atenciosamente, Equipe Swift Tech === Validação === Assunto Válido: true Contém Projeto: true Formatação Adequada: true Tamanho do Corpo: 278 caracteres
❓ Perguntas Frequentes
P: O que é mais rápido, interpolação de string ou concatenação com sinal de mais? R: A interpolação tem desempenho ligeiramente melhor. O compilador otimiza a interpolação em chamadas append internamente, enquanto múltiplas concatenações criam strings intermediárias. No desenvolvimento diário, a diferença é insignificante — priorize a legibilidade. P: Como a indentação é calculada em strings multilinha? R: O
"""de fechamento serve como linha de base. O número de caracteres de espaço em branco antes do delimitador de fechamento é removido do início de cada linha de conteúdo. Se uma linha tiver menos indentação que o delimitador, nenhuma indentação é removida dessa linha. P: Qual é a diferença entre Caractere e String? R: Caractere representa um único caractere visível (escalar Unicode), enquanto String é uma coleção de vários Caracteres. Uma String pode consistir de 0 a muitos caracteres. P: A String do Swift é um tipo por valor ou tipo por referência? R: String é um tipo por valor (struct). Cada atribuição ou passagem de parâmetro cria uma cópia, mas o Swift usa otimização copy-on-write, então só copia de fato quando ocorre uma mutação, mantendo a sobrecarga mínima.
📖 Resumo
- Strings são criadas com aspas duplas; strings vazias usam
""ouString() - Use
+para concatenar strings e+=para anexar conteúdo - A interpolação de string
\(expressao)incorpora qualquer valor em uma string - Métodos comuns: count, isEmpty, hasPrefix, hasSuffix, uppercased, contains
- Strings multilinha usam
"""; a indentação é determinada pela posição do delimitador de fechamento - Character representa um único caractere; itere sobre uma String para obter cada Character
📝 Exercícios
- Iniciante: Use interpolação de string para gerar a frase: "Meu nome é X, tenho Y anos." Armazene o nome e a idade em variáveis.
- Intermediário: Escreva um programa para validar um endereço de email inserido pelo usuário. Requisitos: contém
@e., comprimento maior que 5, exiba em minúsculas. - Desafio: Use uma string multilinha para gerar um template de email HTML com cabeçalho, corpo e rodapé, incorporando o nome do usuário, nome do produto e preço via interpolação.