0Pricing
Swift Academy · Aula

Design de APIs para semântica de valores

Escolha entre struct e class ao criar interfaces públicas e frameworks.

Design de APIs para semântica de valores é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Boas-vindas

Projetar APIs com base na semântica de valor resulta em código previsível, seguro para linhas de execução e fácil de testar. Vamos examinar os princípios e padrões para fazer essa escolha.

O Contrato da Semântica de Valor

Um tipo tem semântica de valor quando: • Duas cópias independentes permanecem independentes para sempre • Alterar uma cópia nunca afeta a outra • O tipo se comporta como `Int` — `a = b; a += 1` deixa `b` inalterado

API Pública: Prefira Tipos de Retorno por Valor

```swift // Reference semantics — caller shares state: func getUser() -> UserClass { ... } // Value semantics — caller gets independent copy: func getUser() -> UserStruct { ... } ``` Os tipos de retorno por valor protegem o estado interno contra alterações externas.

Tipos de Referência Imutáveis

Quando uma classe é sempre imutável, ela tem um comportamento semelhante ao de um valor: ```swift final class Token { let value: String init(_ v: String) { value = v } // No mutable state — safe to share freely } ```

Lista de Verificação: Escolher Estrutura em Vez de Classe

Prefira uma estrutura quando: ✓ O tipo modela dados, não identidade ✓ Não há necessidade de herança ✓ As instâncias não devem ser compartilhadas ou sofrer aliasação ✓ É Equatable pela comparação dos valores dos campos ✓ Funciona bem com a Concorrência do Swift (Sendable)

Sendable e Semântica de Valor

A Concorrência do Swift 6 exige que os tipos que atravessam limites de atores sejam `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } // Safe to pass between actors ``` Tipos de valor cujas propriedades são todas compatíveis com `Sendable` são automaticamente `Sendable`.

Tornando APIs de Classes Seguras para Valores

```swift struct Config { // Expose value snapshot instead of the class: func snapshot() -> Config { self } // copy by value semantics } // Or use a value-type DTO: struct UserDTO: Sendable { var id: UUID; var name: String } ```

Padrão Construtor com Tipos de Valor

```swift struct Request { var url: URL var method: String = "GET" var headers: [String:String] = [:] func adding(header: String, value: String) -> Request { var copy = self copy.headers[header] = value return copy } } let r = Request(url: url).adding(header: "Auth", value: "Bearer x") ```

Sinal na Documentação da API

Escolher uma estrutura em vez de uma classe transmite um sinal claro aos consumidores da API: • "Isto são dados — copie-os livremente" • "Alterar a sua cópia não afetará a minha" • "É seguro passar isto entre linhas de execução" Isso reduz a necessidade de cópias defensivas no código consumidor.

Quando Aceitar a Semântica de Referência

Aceite a semântica de classe ou de referência quando: • A identidade for importante (`===`): dois objetos `User` podem representar a mesma pessoa • O estado mutável compartilhado for a funcionalidade: `Database`, `Cache`, `AudioEngine` • Houver interoperabilidade com Objective-C: os tipos UIKit e AppKit são classes • Houver retornos de chamada do ciclo de vida: `deinit` para liberar recursos

Verificação Rápida

Qual palavra-chave do Swift marca um tipo como seguro para ser passado entre limites de atores na Concorrência do Swift?

Recapitulação

Principais conclusões: • Semântica de valor: as alterações são locais, sem aliasação • Prefira estruturas para modelos de dados; use classes para identidade ou ciclo de vida • Classes imutáveis se comportam como tipos de valor • `Sendable` + tipos de valor = concorrência segura • O padrão construtor usando cópias de estruturas cria APIs imutáveis e organizadas Curso concluído! A seguir: ARC e padrões de gerenciamento de memória.

Perguntas Frequentes

A aula “Design de APIs para semântica de valores” é grátis?

Sim — o texto completo de “Design de APIs para semântica de valores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Design de APIs para semântica de valores”?

Escolha entre struct e class ao criar interfaces públicas e frameworks. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Design de APIs para semântica de valores”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Pilha e heap: onde os valores vivem
  2. Mutação, compartilhamento e aliasing inesperado
  3. Grafos mistos de valores e referências
  4. Design de APIs para semântica de valores
← Voltar para Swift Academy