0Pricing
Swift Academy · Aula

Métodos mutáveis e semântica de cópia na escrita

Entenda por que mutating é necessário e como funciona a otimização COW do Swift.

Métodos mutáveis e semântica de cópia na escrita é 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

Os métodos de estruturas que modificam propriedades armazenadas devem ser marcados como `mutating`. O Swift também usa a cópia na escrita (COW) para tornar a semântica de valor eficiente.

Palavra-chave mutating

```swift struct Counter { var count = 0 mutating func increment() { count += 1 } mutating func reset() { count = 0 } } var c = Counter() c.increment() // count = 1 ``` Sem `mutating`, o compilador rejeita métodos que alteram `self`.

Por que mutating é necessário

Estruturas são tipos de valor. Ao passar uma estrutura, uma *cópia* é passada. O compilador precisa de `mutating` para saber que um método alterará o valor original: ```swift let c = Counter() c.increment() // ❌ cannot use mutating on let ```

Reatribuindo self em mutating

Um método `mutating` pode substituir `self` por completo: ```swift struct Toggle { var isOn: Bool mutating func flip() { self = Toggle(isOn: !isOn) } } ```

Semântica de valor: comportamento de cópia

```swift var a = Counter() var b = a // b is an independent copy a.increment() print(a.count) // 1 print(b.count) // 0 — unaffected ``` Atribuir uma estrutura copia todas as propriedades armazenadas.

Cópia na escrita (COW)

As coleções integradas do Swift — matriz, dicionário, conjunto e cadeia de caracteres — usam COW: ```swift var a = [1,2,3] var b = a // no copy yet — shared storage b.append(4) // NOW a copy is made — a is unchanged print(a) // [1,2,3] print(b) // [1,2,3,4] ```

Por que COW é importante

Sem COW, toda atribuição de estrutura copiaria profundamente todo o conteúdo. COW significa que as cópias são baratas — apenas um incremento da contagem de referências — até que a mutação acione uma cópia real. Isso torna os tipos de valor tão rápidos quanto os tipos de referência na maioria dos cenários.

Implementando COW personalizado

```swift struct Buffer { private var storage: NSMutableData private mutating func ensureUnique() { if !isKnownUniquelyReferenced(&storage) { storage = storage.mutableCopy() as! NSMutableData } } mutating func append(_ byte: UInt8) { ensureUnique() // safe to mutate storage now } } ```

mutating e protocolos

Os métodos de protocolo que modificam valores devem ser marcados como `mutating` no protocolo: ```swift protocol Resettable { mutating func reset() } struct Counter: Resettable { var count = 0 mutating func reset() { count = 0 } } ``` As classes que implementam o protocolo não precisam de `mutating`, pois são tipos de referência.

Estruturas com let são totalmente imutáveis

```swift let pt = Point(x: 1, y: 2) pt.x = 3 // ❌ even though x is var inside Point ``` Quando uma estrutura é armazenada em uma constante `let`, nenhuma de suas propriedades armazenadas pode ser modificada.

Verificação rápida

Quando a cópia na escrita do Swift realmente executa uma cópia?

Recapitulação

Principais aprendizados: • `mutating` marca métodos que alteram propriedades de estruturas • Não é possível chamar métodos `mutating` em estruturas `let` • A atribuição copia a estrutura; COW torna isso barato para coleções • COW aciona uma cópia real somente na primeira mutação • Implemente COW personalizado com `isKnownUniquelyReferenced` Curso concluído! Próximo: herança de classes.

Perguntas Frequentes

A aula “Métodos mutáveis e semântica de cópia na escrita” é grátis?

Sim — o texto completo de “Métodos mutáveis e semântica de cópia na escrita” é 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 “Métodos mutáveis e semântica de cópia na escrita”?

Entenda por que mutating é necessário e como funciona a otimização COW do Swift. 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 “Métodos mutáveis e semântica de cópia na escrita”?

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. Inicializadores automáticos e inicializadores personalizados
  2. Propriedades armazenadas e observadores de propriedades
  3. Propriedades calculadas em estruturas
  4. Métodos mutáveis e semântica de cópia na escrita
← Voltar para Swift Academy