Uma string representa dados textuais.
Em Swift, uma String é uma coleção ordenada de valores Character, em que cada caráter representa um caráter Unicode.
Crias uma string usando um literal de string, que é uma sequência de carateres entre aspas duplas (").
Para strings com várias linhas, usa 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 de Swift ligam-se sem problemas à classe NSString do framework Foundation, dando acesso a amplas capacidades de processamento de texto.
Um Character representa um único agrupamento de grafemas estendido, ou seja, um caráter legível por humanos composto por um ou mais valores escalares Unicode.
Um valor escalar Unicode é um ponto de código de 21 bits no intervalo U+0000 a U+D7FF, inclusive, ou U+E000 a U+10FFFF, inclusive.
let aChar: Character = "A"
Quando escreves um literal de string, o Swift infere automaticamente o seu tipo como String.
Para guardar um único caráter como Character, tens de indicar 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'
Podes juntar strings com o operador de adição (+):
print("honey" + "comb")
// Prints "honeycomb"
Não podes concatenar diretamente um Character a uma String com + sem primeiro converter o caráter numa string.
No entanto, podes usar o método append(_:) para acrescentar diretamente uma string ou um caráter 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."
A interpolação de strings permite-te construir uma string ao incorporar constantes, variáveis, literais e expressões dentro de literais de string.
Coloca cada expressão entre parênteses precedidos de 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"
As strings e os carateres oferecem várias propriedades para inspecionar o seu conteúdo.
Entre as propriedades mais comuns das strings estão:
| Propriedade | Descrição | Exemplo |
|---|---|---|
isEmpty |
Devolve true se a string não tiver carateres |
"Hello".isEmpty avalia para false
|
count |
Devolve o número de carateres na string |
"Hello".count avalia para 5
|
Para uma lista completa de propriedades, consulta a documentação da Apple sobre String.
Entre as propriedades mais comuns dos carateres estão:
| Propriedade | Descrição | Exemplo |
|---|---|---|
isLowercase |
Devolve true se o caráter for minúsculo |
"a".isLowercase avalia para true
|
isUppercase |
Devolve true se o caráter for maiúsculo |
"A".isUppercase avalia para true
|
isNumber |
Devolve true se o caráter for um algarismo |
"1".isNumber avalia para true
|
isWhitespace |
Devolve true se o caráter for um espaço em branco |
" ".isWhitespace avalia para true
|
Para uma lista completa de propriedades, consulta a documentação da Apple sobre Character.
Podes converter outros tipos em strings com o inicializador String(_:), que suporta 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"
Os literais de string de Swift suportam várias sequências de escape para carateres especiais:
| Sequência | Descrição |
|---|---|
\0 |
Caráter nulo |
\\ |
Barra invertida |
\t |
Tabulação horizontal |
\n |
Avanço de linha (nova linha) |
\r |
Retorno de carro |
\' |
Aspas simples |
\" |
Aspas duplas |
\u{n} |
Valor 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 💖
Neste exercício vais escrever código para ajudar uma empresa de letreiros a criar mensagens personalizadas para os seus letreiros.
Define as seguintes strings constantes que serão usadas para criar letreiros:
birthday: Contém o valor "Birthday"valentine: Contém o valor "Valentine's Day"anniversary: Contém a string "Anniversary"Define os seguintes carateres constantes que serão usados para criar letreiros:
space: Contém o valor " " (um único espaço)exclamation: Contém o valor "!"Implementa a função buildSign(for:name:), que recebe o argumento for, que contém uma das três strings que definiste na primeira tarefa, e o argumento name, que é uma string que contém o nome da pessoa a quem o letreiro se destina.
Deves usar concatenação para construir a mensagem do letreiro e lembra-te de reutilizar as constantes já definidas.
A função deve devolver a mensagem do letreiro como string.
buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"
buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"
Implementa a função graduationFor(name:year:), que recebe o argumento name, uma string que contém o nome da pessoa a quem o letreiro se destina, e o argumento year, um inteiro que contém o ano de graduação da pessoa.
Deves usar strings de modelo para construir a mensagem do letreiro.
A função deve devolver a mensagem do letreiro como string.
graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"
Implementa a função costOf(sign:), que recebe o argumento sign, uma string que contém a mensagem do letreiro.
O letreiro tem um preço base de 20 na moeda indicada. Além disso, cada letra custa 2 (os espaços em branco são incluídos no cálculo).
A função deve devolver o custo do letreiro como um inteiro.
costOf(sign: "Happy Birthday Grandma!")
// returns 66
Inscreve-te no Exercism para aprenderes e dominares Swift com 35 conceitos116 exercícios, e mentoria humana real, tudo grátis.