Aula 32: Subscripting em Swift
Em Swift, os subscripts oferecem uma maneira conveniente de acessar elementos em uma coleção, lista ou sequência. Eles permitem que você use colchetes ([]
) para recuperar ou modificar valores dentro de tipos que atendem à sintaxe de subscript. Os subscripts podem ser definidos em classes, estruturas e enumerações, tornando-os um recurso poderoso para manipulação de dados.
Sintaxe Básica de Subscript
A forma mais básica de um subscript consiste em um único índice. Veja como definir e usar um subscript simples:
Definindo um Subscript
struct TabelaDeMultiplicação {
let multiplicador: Int
subscript(índice: Int) -> Int {
return multiplicador * índice
}
}
Usando o Subscript
let tabelaDeTres = TabelaDeMultiplicação(multiplicador: 3)
print(tabelaDeTres[1]) // Saída: 3
print(tabelaDeTres[5]) // Saída: 15
No exemplo acima, definimos uma estrutura TabelaDeMultiplicação
com um subscript que recebe um índice inteiro e retorna o produto do multiplicador pelo índice.
Vários Índices
Você também pode definir subscripts que aceitam múltiplos parâmetros. Veja como fazer isso:
Definindo um Subscript com Múltiplos Parâmetros
struct Matriz {
let linhas: Int, colunas: Int
var grade: [Double]
init(linhas: Int, colunas: Int) {
self.linhas = linhas
self.colunas = colunas
grade = Array(repetindo: 0.0, contagem: linhas * colunas)
}
subscript(linha: Int, coluna: Int) -> Double {
get {
return grade[(linha * colunas) + coluna]
}
set {
grade[(linha * colunas) + coluna] = newValue
}
}
}
Usando o Subscript de Múltiplos Parâmetros
var matriz = Matriz(linhas: 2, colunas: 2)
matriz[0, 1] = 1.5
print(matriz[0, 1]) // Saída: 1.5
Na estrutura Matriz
, definimos um subscript que aceita dois parâmetros, representando os índices de linha e coluna. O acessor get
recupera o valor da grade, enquanto o acessor set
permite que você o modifique.
Subscripting com Índices de String
Você também pode definir subscripts que usam parâmetros de string. Isso é particularmente útil em coleções personalizadas ou dicionários.
Definindo um Subscript com Índices de String
struct PerfilDeUsuario {
var dados: [String: String] = [:]
subscript(chave: String) -> String? {
get {
return dados[chave]
}
set {
dados[chave] = newValue
}
}
}
Usando o Subscript com Índice de String
var perfil = PerfilDeUsuario()
perfil["usuario"] = "joao_doe"
print(perfil["usuario"]) // Saída: Optional("joao_doe")
Neste exemplo, a estrutura PerfilDeUsuario
utiliza um subscript que aceita uma chave do tipo string para acessar dados do usuário.
Resumo
Os subscripts em Swift oferecem uma maneira limpa e intuitiva de acessar e modificar os elementos de coleções ou tipos de dados personalizados. Eles podem aceitar qualquer número de parâmetros e podem até ser definidos com chaves de string para maior usabilidade. Ao usar subscripts, você pode simplificar a sintaxe necessária para interagir com seus tipos personalizados, mantendo a flexibilidade necessária para várias estruturas de dados.
Conclusão
Com esta compreensão dos subscripts em Swift, você está agora equipado para criar tipos de dados mais sofisticados e amigáveis ao usuário. Seja construindo uma matriz, um dicionário personalizado ou qualquer outra coleção, os subscripts podem ajudar a simplificar seu código e aumentar a legibilidade de seus programas. Continue experimentando com subscripts para compreender totalmente seu poder e utilidade!