Swift: Tupla

Também conhecido como Struct Lite ™ (mas não realmente)

Os tipos de tupla são um conceito estranho para desenvolvedores Objective-C e às vezes podem ser confundidos com um structou class. Mas, na verdade, eles são muito mais básicos do que ambos. Gosto de pensar neles como uma estrutura em miniatura ou Struct Lite ™ que deve ser usado em um escopo mínimo e, em seguida, descartado.

De acordo com a documentação da Apple sobre os tipos de Swift:

Um tipo de tupla é uma lista separada por vírgulas de zero ou mais tipos, entre parênteses.

Eles são apenas um composto de outros tipos diferentes. Tuplos pode conter zero ou mais tipos, em geral, de um String, Integer, Boolbem como outros tuplos. Observe também que as tuplas são passadas por valor , não por referência.

let foo = (0, false, “Hello”)

let foo: (Int, Bool, String) = (0, false, “Hello”)

print(foo.0) // print: “0”
print(foo.1) // print: “false”
print(foo.2) // print: “Hello”

let bar: (Int, (Bool, String)) = (1, (false, “Hello”))
print(bar.0)   // print: “0”
print(bar.1.0) // print: “false”
print(bar.1.1) // print: “Hello”

Mas em vez de usar índices e ter que lembrar qual corresponde a qual valor, é uma prática recomendada nomear as propriedades de sua tupla sempre que possível.

let person = (age: 28, isTall: false, name: “Andyy”)
print(person.age)    // print: “28”
print(person.isTall) // print: “false”
print(person.name)   // print: “Andyy”

O melhor lugar para usar uma tupla é quando você deseja uma função que pode retornar vários tipos. Se você é um desenvolvedor Objective-C, esse conceito parece estranho e talvez até impossível. Anteriormente, tínhamos que superar esse problema retornando um NSArrayou NSDictionary. Mas mesmo essa resolução pode ser perigosa. Porque e se tentarmos fazer o typecasting do objeto errado do NSArraye chamar uma função específica nele? Isso pode causar uma falha no tempo de execução.

Então, em vez disso, vamos ver como podemos fazer com que uma função retorne vários valores, em vez de criar soluções hacky de interrupção para as limitações do Objective-C:

typealias Person = (age: Int, isTall: Bool, name: String)
func getMultipleValues() -> Person {
let person: Person = (age: 28, isTall: false, name: “Andyy”)
return person
}
let andyy = getMultipleValues()
print(andyy.age)    // print: "28"
print(andyy.isTall) // print: "false"
print(andyy.name)   // print: "Andyy"

Mas, como você pode ver acima, há uma chamada de função getMultipleValues() que retorna uma tupla de três tipos de dados separados e diferentes, cada um com seu próprio nome de variável correspondente.

Instanciação de estrutura (obsoleta)

Atualização: Este será descontinuado.
Proposta do Swift 3.0 : SE-0029
Remover o comportamento do splat da tupla implícita dos aplicativos de função

No início deste post, eu brincando me referi às tuplas como Struct Lite ™ . Um fato pouco conhecido é que tuplas podem ser usadas para instanciar structs.

let size = CGSize(width: 100, height: 100)

let arguments: (width: CGFloat, height: CGFloat) = (100, 100)
var size = CGSize(arguments)

let arguments: (height: CGFloat, width: CGFloat) = (100, 100)
❗️ var size = CGSize(arguments) 

Você vê o que eu fiz lá? Mudei a organização dos argumentos trocando os locais heighte width . Mesmo que sejam ambos CGFloat, o compilador não pode inferir o que você está tentando fazer.

Fato interessante

Se você já usou o Swift anteriormente, é provável que já tenha usado tuplas para tipos de retorno, mas nem sabe disso. Abaixo, temos três funções separadas, todas as quais fazem exatamente a mesma coisa (nada) e nenhuma delas retorna qualquer valor.

func doNothingA() -> Void { }
func doNothingB() -> () { }
func doNothingC() { }

O legal é que Voidé apenas um typealiasfor (), que na verdade é apenas uma tupla vazia. Porque se você se lembra no início deste post, mencionei que tuplas podem conter zero ou mais tipos.

Mente. Queimado. De nada.

Escolha sua pronúncia

Há uma grande confusão sobre como as pessoas pronunciam a palavra “tupla”. Alguns gostam de dizer “Two-pull”, outros dizem “Tup-pl”, e os mais loucos dizem “Choo-pl”. Seja qual for a sua preferência, esteja preparado para ser convocado.

O código de amostra desta postagem pode ser encontrado no GitHub. É apenas um arquivo Playgrounds simples para ajudá-lo a entender um pouco melhor.

Se gostou do que leu hoje pode conferir nossos outros artigos ou deseja entrar em contato, por favor me mande um tweet ou siga-me no Twitter , realmente faz o meu dia. Também organizo a Conferência Playgrounds em Melbourne, Austrália e gostaria de vê-los no próximo evento.

Suggested posts

Encontrar informações sobre nomes de domínio

Um trecho de Small, Sharp Software Tools por Brian P. Hogan

Encontrar informações sobre nomes de domínio

Quando você faz uma solicitação para facebook.com, seu computador procura o nome de domínio para traduzir esse nome de domínio em um endereço IP para que seu computador possa fazer essa conexão.

“Aquela pequena ilha muda tudo”

Como projetamos as Lyft Live Activities para elevar a experiência do passageiro

“Aquela pequena ilha muda tudo”

Uma virada de jogo para o compartilhamento de viagens De todas as coisas que fazemos na Lyft, coreografar pickups entre passageiros e motoristas é uma das mais complexas e consequentes. Pregar essa coreografia depende de Lyft fazer muitas coisas bem, mas simplesmente manter os pilotos atualizados é essencial.

Related posts

Conversas Perigosas

Conversas Perigosas

Se quisermos continuar a prosperar neste planeta, teremos que ter conversas perigosas. Aqueles que desafiam o que temos feito, o que estamos fazendo e o que estamos determinados a continuar fazendo (ou planejamos fazer).

O desafio de leitura Goodreads é tóxico

O desafio de leitura Goodreads é tóxico

A coceira na minha mão aumentou enquanto eu negociava com o livreiro local por mais um livro. Este livro, como o resto que comprei recentemente, encontraria seu trono na minha pilha 'To Be Read' (TBR); e ainda assim, eu comprei.

Dois anos em design - O bom, o mau e o feio…

Dois anos em design - O bom, o mau e o feio…

“Ei, Siri, toque Me Dive, de Olivia Dean.” Era maio de 2021 quando comecei meu estágio na Future Academy Africa em Akure, Nigéria.

Repensando a mídia: as cinco verdades de McChesney e o futuro das comunicações

No mundo hiperconectado de hoje, os sistemas de mídia desempenham um papel fundamental na formação da opinião pública e, consequentemente, na tomada de decisões democráticas. Em sua análise profunda da economia política da comunicação, o estudioso Robert McChesney desafia a sabedoria convencional e apresenta o que chama de “cinco verdades” sobre a mídia.